Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用stdio的健壮编程(从posix用户的角度)_C_File_Posix_Stdio_Libc - Fatal编程技术网

C 使用stdio的健壮编程(从posix用户的角度)

C 使用stdio的健壮编程(从posix用户的角度),c,file,posix,stdio,libc,C,File,Posix,Stdio,Libc,在从纯posix开发出来之后,我正在尝试解决如何正确使用文件对象。我觉得我不知何故错过了重点 请有人从头到尾给我举一个例子,说明使用fprintf()和fwrite()编写的正确方法,确保所有数据都正确写入和刷新,并相应地处理任何非致命错误。例如,如果在fwrite期间在底层文件描述符上获得EINTR,那么ferror()会发生什么情况?如果填充文件对象的缓冲区,会发生什么情况 上下文:我有一个程序关键管道,如果它坏了,那么我必须重新启动整个过程,所以我想确切地知道如何区分“请重试”、“与文件描

在从纯posix开发出来之后,我正在尝试解决如何正确使用文件对象。我觉得我不知何故错过了重点

请有人从头到尾给我举一个例子,说明使用fprintf()和fwrite()编写的正确方法,确保所有数据都正确写入和刷新,并相应地处理任何非致命错误。例如,如果在fwrite期间在底层文件描述符上获得EINTR,那么ferror()会发生什么情况?如果填充文件对象的缓冲区,会发生什么情况


上下文:我有一个程序关键管道,如果它坏了,那么我必须重新启动整个过程,所以我想确切地知道如何区分“请重试”、“与文件描述符无关的libc错误”和“您的文件描述符正在为峡湾而憔悴”。如果可能的话,我试图避免重新分解现有代码以使用纯posix,但我觉得到目前为止还没有找到对stdio文件边缘情况的全面描述。尝试为fwrite grepping gcc(4.1.1)源代码时,线索在fwrite_解锁时消失。

标准I/O函数实际上不是编译器的一部分,而是标准库的一部分(例如Linux平台上的glibc)。要获得一个好的参考,请参见,例如,您知道,C标准I/O函数是POSIX函数(因为整个标准都是通过引用合并的,并且有额外的保证)。我会进行重构。如果是关键任务,我总是使用原始系统调用。它们更简单、更可靠<代码>写入()。