为什么不能将C标准I/O与套接字一起使用

dmi*_*tru 4 c unix sockets network-programming

人们经常说在使用套接字时不应该使用C标准I/O函数(比如fprintf(),fscanf()).

我不明白为什么.我想如果原因只是它们的缓冲性质,那么每次输出时都可以刷新输出缓冲区,对吧?

为什么每个人都使用UNIX I/O函数?在使用标准C功能是否合适且正确的情况下是否存在?

Ala*_*rry 8

你当然可以使用stdio套接字.你甚至可以编写一个只使用它的程序,stdinstdout从中运行它inetd(它提供套接字STDIN_FILENOSTDOUT_FILENO),即使它根本不包含任何套接字代码也可以工作.

你不能做的是混合缓冲I/O selectpoll因为没有fselect或没有fpoll工作FILE *,你甚至不能自己实现一个,因为没有标准的查询方式FILE *来查明它的输入缓冲区是否为空.

只要你需要处理多个连接,stdio就不够好了.

  • @MaximSkurydin你可以得到的FD,并通过它来选择,但选择部件,因为它认为没有什么可看的,因为你还没有读出的数据中,选择不知道标准输入输出缓冲. (3认同)