我将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相同的字符特殊文件或如何进一步继续?
答案 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上)编译,则必须查看此处:
弄清楚如何为Linux重做代码。在我看来,它有点混乱 - 来自Soalris的TCP包装 - &gt; Linux,就是这样。