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

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

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

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

最佳答案
你当然可以使用带套接字的stdio.你甚至可以编写一个只使用stdin和stdout的程序,从inetd运行它(它在STDIN_FILENO和STDOUT_FILENO上提供一个套接字),即使它根本不包含任何套接字代码也能工作.

您不能做的是将缓冲I / O与select或poll混合使用,因为FILE *上没有fselect或fpoll工作,你甚至无法自己实现,因为没有标准的查询FILE *的方法来查找输出缓冲区是否为空.

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

转载注明原文:为什么不能将C标准I / O与套接字一起使用 - 代码日志