Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
fcntl和套接字之间的链接_C - Fatal编程技术网

fcntl和套接字之间的链接

fcntl和套接字之间的链接,c,C,我读过有关套接字、连接、fcntl、缓冲区等的内容。 但是我不知道套接字和fcntl函数之间的链接是什么。 我只知道套接字用于建立连接,fcntl用于控制打开的文件。我不知道fcntl是如何用来控制文件的,它与fopen、fwrite、fclose函数有何不同。 任何人都可以帮我,因为我被卡住了。fcntl系统调用用于对打开的文件描述符执行操作-获取或设置文件描述符标志,例如更改O_追加或O_非块状态标志 int fcntlint fd,int cmd,…/*arg*/ 在这种情况下,打开的套接

我读过有关套接字、连接、fcntl、缓冲区等的内容。 但是我不知道套接字和fcntl函数之间的链接是什么。 我只知道套接字用于建立连接,fcntl用于控制打开的文件。我不知道fcntl是如何用来控制文件的,它与fopen、fwrite、fclose函数有何不同。 任何人都可以帮我,因为我被卡住了。

fcntl系统调用用于对打开的文件描述符执行操作-获取或设置文件描述符标志,例如更改O_追加或O_非块状态标志

int fcntlint fd,int cmd,…/*arg*/

在这种情况下,打开的套接字将由文件描述符sockFd引用:

sockFd=插座PF_本地,插座DGRAM,0

例如,要使套接字非阻塞,请使用fcntl更改套接字文件描述符的状态。*注:简化代码:*

int flags=fcntlsockFd,F_GETFL,0;/*获取套接字的标志*/ 标志|=O|U非块;/*将O_非块状态添加到套接字描述符的标志*/
状态=fcntlsockFd,F_SETFL,flags;/*将新标志应用于套接字*/

fcntl用于控制文件描述符,而不是特定的文件。 open可用于获取与文件关联的文件描述符。同样,例如套接字和管道调用返回一个文件描述符。这些文件描述符稍后可能与fcntl一起使用。 因此,连接是:从套接字调用获得的文件描述符可以用作fcntl函数的参数。 文件描述符和相关函数是POSIX标准的一部分

你提到福彭。 fopen返回一个文件指针。简单地说,在大多数*unix系统上,文件指针是构建在文件描述符之上的东西,但这不是必需的,也可能不是真的。例如,文件指针可能有一些缓冲选项:写入的字节存储在缓冲区中,然后在换行符上刷新。可以使用setvbuf或通过fflush调用手动修改此行为。 您可以使用fileno获取与file*指针关联的文件描述符。然后将此文件描述符与fcntl调用一起使用。文件*指针也不必与文件关联,例如,它可能与内存缓冲区关联,请参阅fmemopen函数。
fopen、fwrite、fclose是C标准的一部分。

您似乎在说您已经阅读了一些关于这些函数的一般描述信息。难道你不认为阅读他们的实际文档可以让你更好地理解他们吗?通过谷歌搜索fcntl,我得到了排名前五名的fcntl手册页面的四份副本,以及fcntl.h手册页面的一份副本,这可能是一个更大的宝藏。是的,我已经这样做了,但我从这些信息中什么也没有得到。然后我怀疑我们能否提供一个有用的答案。对于我们来说,即使尝试,你也需要大幅缩小你的问题范围。最好是基于实际的代码。谢谢你的反应