0

我正在将 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 的值 > 0 在 Linux 中为 -1。原因是在 UNIX 目录下的 /dev 文件 tcp 存在。但在 LINUX 中,它位于 /dev 下,此 tcp 文件不存在。同样在 UNIX 中,这个 tcp 文件是不同于普通文件的字符特殊文件。

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

4

1 回答 1

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 包装器——> Linux,就是这样。

于 2012-05-17T03:34:19.227 回答