由于我是最近学习 libev 的新手,所以io_watcher
我不太了解 a 中的可读/可写概念。据我所知,linux系统编程中有一个参数:
O_ASYNC
当指定文件变得可读或可写时,将生成一个信号(默认为 SIGIO)。此标志仅适用于终端和套接字,不适用于常规文件。
那么,既然常规文件不会打扰可读/可写,那么可读/可写在套接字编程中的真正含义是什么?内核采取了哪些措施来确定套接字文件描述符是否可读?
考虑到一切都是文件的理念,每个具有不同描述符编号的套接字描述符实际上都指向同一个文件吗?如果是这样,我可以认为可读/可写问题是由同步引起的吗?
好吧,看来我问了一个愚蠢的问题。我真正的意思是套接字和常规文件都通过文件描述符读写,所以为什么套接字描述符有一个可读/可写的概念,而普通文件却没有。由于 EJP 告诉我这是因为缓冲区和每个描述符都有自己的缓冲区对,所以我的结论是:可读/可写概念是针对缓冲区的,如果缓冲区为空,则不可读,而缓冲区已满,则不可写。可读可写与同步无关,并且由于常规文件没有缓冲区,因此它始终是可读写的。
还有更多的问题:当说接收缓冲区时,这个缓冲区不是同一个东西int recv(SOCKET socket, char FAR* buf, int len, int flags);
,对吧?