C 使用stdio的健壮编程(从posix用户的角度)
在从纯posix开发出来之后,我正在尝试解决如何正确使用文件对象。我觉得我不知何故错过了重点 请有人从头到尾给我举一个例子,说明使用fprintf()和fwrite()编写的正确方法,确保所有数据都正确写入和刷新,并相应地处理任何非致命错误。例如,如果在fwrite期间在底层文件描述符上获得EINTR,那么ferror()会发生什么情况?如果填充文件对象的缓冲区,会发生什么情况C 使用stdio的健壮编程(从posix用户的角度),c,file,posix,stdio,libc,C,File,Posix,Stdio,Libc,在从纯posix开发出来之后,我正在尝试解决如何正确使用文件对象。我觉得我不知何故错过了重点 请有人从头到尾给我举一个例子,说明使用fprintf()和fwrite()编写的正确方法,确保所有数据都正确写入和刷新,并相应地处理任何非致命错误。例如,如果在fwrite期间在底层文件描述符上获得EINTR,那么ferror()会发生什么情况?如果填充文件对象的缓冲区,会发生什么情况 上下文:我有一个程序关键管道,如果它坏了,那么我必须重新启动整个过程,所以我想确切地知道如何区分“请重试”、“与文件描
上下文:我有一个程序关键管道,如果它坏了,那么我必须重新启动整个过程,所以我想确切地知道如何区分“请重试”、“与文件描述符无关的libc错误”和“您的文件描述符正在为峡湾而憔悴”。如果可能的话,我试图避免重新分解现有代码以使用纯posix,但我觉得到目前为止还没有找到对stdio文件边缘情况的全面描述。尝试为fwrite grepping gcc(4.1.1)源代码时,线索在fwrite_解锁时消失。标准I/O函数实际上不是编译器的一部分,而是标准库的一部分(例如Linux平台上的glibc)。要获得一个好的参考,请参见,例如,您知道,C标准I/O函数是POSIX函数(因为整个标准都是通过引用合并的,并且有额外的保证)。我会进行重构。如果是关键任务,我总是使用原始系统调用。它们更简单、更可靠<代码>写入()。