我正在将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);
if ( socket_id <0 )
{
exit(FAILURE);
}
return 0;
}
在UNIX中,socket_id的值> 0
在Linux中为-1
。原因是在UNIX中,有一个/dev/tcp
。在Linux上不存在。同样在UNIX中,此tcp
文件是字符特殊文件,与普通文件不同。
有什么方法可以在Linux中创建与UNIX中相同的字符特殊文件,或者如何进一步进行此操作?
5
为什么不使用Berkeley插座/ POSIX插座呢?
—
jofel 2012年
是的,Jofel。在那种情况下,我需要修改大量不可行的现有代码。我正在寻找在Linux中替换/ dev / tcp的方法,或者在Linux中如何创建它以使其与Unix一样工作。以下是有关Unix中/ dev / tcp的信息。
—
missings分号2012年
您如何编译软件?Linux上的AFAIK,XTI / TLI仅受某些额外的库支持,例如来自OpenSS7的Linux Fast Stream或诸如iBCS的模拟器。无法在Linux上简单地创建/ dev / tcp。您可能会发现bash使用了/ dev / tcp,但在这种情况下,它只是一个遗物,告诉bash打开tcp套接字。该设备实际上不存在。
—
2012年
cc tet.o -o test-L $ ORACLE_HOME / lib64 -lxnet执行的二进制文件测试有一种方法可以使用命令mknod tcp c <x> <y>在/ dev下创建字符文件tcp。在unix中,tcp的设备条目为42,2。即文件命令(文件/ dev / tcp)显示“特殊字符(42/2)”,其中x = 42,y = 2。但是使用与我在Linux中创建的相同条目相同的名称,即mknod tcp c 422。socket_id为-1。这里的问题是要在Linux上使用的设备条目。
—
missings分号2012年
@smilebhuff创建节点是不够的,内核中的某个人必须对此负责-在Linux中情况并非如此。
—
glglgl 2012年