如果我是一个文件,调用or和我应该使用哪一个fopen有什么区别?fcloseclose
如果分叉的孩子也可以访问该文件,那么当他们完成该文件时应该怎么做?
如果我是一个文件,调用or和我应该使用哪一个fopen有什么区别?fcloseclose
如果分叉的孩子也可以访问该文件,那么当他们完成该文件时应该怎么做?
fclose()是与文件流相关的功能。当您在 的帮助下打开文件fopen()并将流分配给FILE *ptr. 然后您将使用fclose()关闭打开的文件。
close()是一个与文件描述符相关的函数。当您在 的帮助下打开文件open()并将描述符分配给int fd. 然后您将使用close()关闭打开的文件。
fopen()等函数fclose()是C 标准函数,而其他类别的open()等close()是 POSIX 特定的。这意味着用open(), close()etc 编写的代码不是标准的 C 代码,因此不可移植。而用fopen(), fcloseetc 编写的代码是标准代码,可以移植到任何类型的系统上。
我应该使用哪一个?
这取决于您打开文件的方式。如果你用 . 打开文件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