如果我是一个文件,调用or和我应该使用哪一个fopen
有什么区别?fclose
close
如果分叉的孩子也可以访问该文件,那么当他们完成该文件时应该怎么做?
如果我是一个文件,调用or和我应该使用哪一个fopen
有什么区别?fclose
close
如果分叉的孩子也可以访问该文件,那么当他们完成该文件时应该怎么做?
fclose()
是与文件流相关的功能。当您在 的帮助下打开文件fopen()
并将流分配给FILE *ptr
. 然后您将使用fclose()
关闭打开的文件。
close()
是一个与文件描述符相关的函数。当您在 的帮助下打开文件open()
并将描述符分配给int fd
. 然后您将使用close()
关闭打开的文件。
fopen()
等函数fclose()
是C 标准函数,而其他类别的open()
等close()
是 POSIX 特定的。这意味着用open()
, close()
etc 编写的代码不是标准的 C 代码,因此不可移植。而用fopen()
, fclose
etc 编写的代码是标准代码,可以移植到任何类型的系统上。
我应该使用哪一个?
这取决于您打开文件的方式。如果你用 . 打开文件fopen()
,你应该使用fclose()
,如果你用 . 打开文件open()
,你应该使用close()
.
如果分叉的孩子也可以访问该文件,那么当他们完成该文件时应该怎么做?
这也取决于您fork()
拨打电话的位置:打开文件之前或打开文件之后。
见:man fclose
和man close
open()
并且close()
是返回和获取文件描述符的 UNIX 系统调用,用于与其他 UNIX 系统调用(例如write()
. fopen()
和fclose()
是在 s 上运行的标准 C 库函数FILE*
,用于fwrite
和fprintf
. 后者几乎总是你应该使用的:它们更简单,更跨平台。
至于你的第二个问题,分叉的孩子与父母有相同的数字文件描述符,但它是一个副本;他们可以关闭它,它仍然对父母和其他孩子开放。(虽然就个人而言,我不喜欢在我...时打开文件fork()
......我喜欢明确地使用这种共享资源。当然,管道是一个例外。)
我应该使用哪一个?
如果您使用 打开文件fopen
,请使用 关闭它fclose
。在这种情况下使用close
可能会导致分配的句柄内存泄漏fopen