Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 操作员=在fd_集合上-套接字通信linux_C_Select - Fatal编程技术网

C 操作员=在fd_集合上-套接字通信linux

C 操作员=在fd_集合上-套接字通信linux,c,select,C,Select,我正在编写一个使用select()的程序,给定一个读取fd_集的参数。 在程序中,我保存了两个fd_集: 1.名为DB的fd_集合和我能处理的所有fd。 2.名为toSelect的fd_集-我将其发送到select()方法,并在select()返回后处理 在调用select()之前,我将执行以下操作: toSelect=DB 为了将数据库中的所有fd复制到toSelect fd_集合。 由于我的程序运行得不太好(出现消息“由对等方重置连接”),我的代码可能有问题。 这个作业可以吗? 如果没有,如

我正在编写一个使用select()的程序,给定一个读取fd_集的参数。
在程序中,我保存了两个fd_集:
1.名为DB的fd_集合和我能处理的所有fd。
2.名为toSelect的fd_集-我将其发送到select()方法,并在select()返回后处理

在调用select()之前,我将执行以下操作:
toSelect=DB
为了将数据库中的所有fd复制到toSelect fd_集合。
由于我的程序运行得不太好(出现消息“由对等方重置连接”),我的代码可能有问题。
这个作业可以吗? 如果没有,如何将一个fd_集复制到另一个fd_集而不使用运算符=?

谢谢。

不要执行
toSelect=DB
,而是尝试使用FD_ISSET和FD_SET宏将值从一个复制到另一个,看看问题是否仍然存在。

FD_SET的内部详细信息,包括操作符=是否将被定义(以及通过编译)是否是实现定义的。fd_集向您承诺的唯一事情是它以宏(或函数)fd_集、fd_CLEAR、fd_ISSET、fd_ZERO的形式提供的接口


如果你想使用operator=你可以为它编写你自己的包装类。

说什么?赋值是为所有C数据类型定义的,包括用户定义的类型,以及C++中所有POD类型的分配。FDSSET与C++没有什么特别的关系。@尼尔,是的,我错误地认为它可能无法通过编译,但是被定义并不能使这种声明正确。使用运算符=不是承诺的fd_集接口的一部分。是的,它是-fd_集是POD。
fd_集
未明确指定为POD,但由于其他要求,除非它依赖于C编译器中的非标准扩展,否则它必须是POD。如果
fd_集
使用了任何分配的内存,标准C实现无法释放它。可以尝试使用非标准但通用的
alloca
来构造一个假设的
fd\u集
实现,但这样会遇到问题,因为只要
fd\u集
不停止存在,在调用
fd\u*
的函数返回后继续使用它是有效的(事实上,如果您将“<代码> FDYSETS/CODE >设置为您的应用程序中的自己的函数”,这将是一种非常常见的用法。当张贴在这里时,请尝试区分C和C++。Stand()API是C/POSIX API。