在套接字设置完成后,是更好的实践方法使用read(2)和write(2)调用套接字描述符,还是使用fdopen(3)将流与套接字描述符相关联,然后使用stdio(3)函数?
int sfd = socket(PF_INET, SOCK_STREAM, 0);
// setup the socket using sfd
FILE * stream = fdopen(sfd, "r+");
// use fprintf, fscanf, etc
编辑:我还取消了流的缓冲
setbuf(stream, NULL)
为了避免像评论中提到的那样必须刷新它。我一直在使用这种方法,因为它让我重用为FILE*流编写的代码,并且我有使用格式字符串的优势(我正在处理人类可读的文本)。GNU似乎在暗示这是一个好主意。 然而,通常当我看到使用套接字的代码时,套接字描述符被用于所有操作,而不是流。使用低级别函数是否有优势? http://www.gnu.org/software/libc/manual/html_node/Streams-and-File-Descriptors.html