/ dev / tcp在LINUX中不存在

时间:2012-05-16 10:09:59

标签: linux unix

我将C / pro * c代码从UNIX移植到LINUX。代码是:

#define __NFDBIT       (8 * sizeof(unsigned long))
#define __FD_SETSIZ    1024
#define __FDSET_LONG   (__FD_SETSIZ/__NFDBIT)
typedef struct {
    unsigned long fds_bits [__FDSET_LONG];
} __ernel_fd_set;

typedef __ernel_fd_set           fd_set_1;
int main()
{
    fd_set_1 listen_set;
    int listen_sd;
    int socket_id;
    FD_ZERO(&listen_set);
    socket_id = t_open("/dev/tcp", O_RDWR | O_NONBLOCK, (struct t_info *) 0);
    return 0;
}
if ( socket_id <0 )
{
    exit(FAILURE);
}

在UNIX中,socket_id的值为&gt; Linux中为0,为-1。原因是在目录/ dev下的UNIX中存在文件tcp。但是在LINUX中它/ dev下这个tcp文件不存在。同样在UNIX中,这个tcp文件是字符特殊文件,它与普通文件不同。

有没有办法在LINUX中创建与UNIX相同的字符特殊文件或如何进一步继续?

1 个答案:

答案 0 :(得分:1)

Solaris使用ndd /dev/tcp [value = something]更改正在运行的内核上的系统tcp配置。 Linux不这样做。

在Linux中你写入/ proc / sys / net / ipv4 / *(* ==很多文件)。 tcp的其他值已更改 在/etc/sysctl.conf中,因此Linux没有ndd等价物,也没有/ dev / tcp。

凭空创建/ dev / tcp不会让您通过套接字访问内核值。 插座的功能是什么?你将不得不使用你的代码和RH的系统管理指南来研究如何做到这一点。

如果使用libwrap或其他TCP包装程序库(在Solaris上)编译,则必须查看此处:

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-tcpwrappers-access.html

弄清楚如何为Linux重做代码。在我看来,它有点混乱 - 来自Soalris的TCP包装 - &gt; Linux,就是这样。