linux read(0,buf,100)其中的fd=0是什么意思?

linux read(0,buf,100)其中的fd=0是什么意思?,第1张

shell下输入“man 2 read ” 你先看看。

ssize_t read(int fd, void *buf, size_t count)

意义:从文件描述符fd所指向的文件中读取count个字节的数据到buf所指向的缓存中。

文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。

文件描述符0代表标准文件。

fd是这么来的。

fd=(open或creat成功调用时的返回值)。

我上学是书上就写这么多了。

select系统调用原型如下:

#include <sys/select.h>int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout)12

参数readfds, writefds, exceptfds参数分别指向可读、可写和异常事件对应的文件描述符集合。

哪些情况下文件描述符可以被认为是可读、可写或者出现异常,对于select的使用非常关键。

在网络编程中,下列情况下socket可读:

1、socket内核接收缓存区中的字节数大于或等于其低水位标记SO_RCVLOWAT。此时可以无阻塞地读该socket,并且读 *** 作返回的字节数大于0。

2、socket通信对方关闭连接。此时对该socket读 *** 作将返回0。

3、监听socket上有新的连接请求。

4、socket上有未处理的错误。此时我们可以使用getsockopt来读取和清除该错误。

下列情况下socket可写:

1、socket内核发送缓冲区中的可用字节数大于或等于其低水位标记SO_SNDLOWAT。此时我们可以无阻塞写该socket,并且写 *** 作返回的字节数大于0。

2、socket写 *** 作被关闭。对写 *** 作被关闭的socket执行写 *** 作将触发一个SIGPIPE信号。

3、socket使用非阻塞connect连接成功或者失败(超时)之后。

4、socket上有未处理的错误。此时我们可以使用getsockopt来读取和清除该错误。

网络程序中,select能处理的异常情况只有一种:socket上接收到带外数据。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8692627.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存