在 POSIX 环境中,当使用系统调用来操作文本文件(如
open()
、close()
、read()
和 write()
)时,使用 close(file_descriptor)
关闭文件描述符后,是否有一种方法可以检查我是否成功关闭了它?
示例:
int main(int argc, char **argv)
{
int input_file; // file descriptor for input file
int output_file; // file descriptor for output file
input_file = open(argv[1], O_RDONLY));
ouput_file = open(argv[2], ...file properties & permissions and crap.....);
// blah blah blah...
close(input_file);
close(output_file);
// what can I code here to check if the file descriptor was actually closed?
}
errno == EBADF
。 - Isaacclose()
之后立即打开另一个具有相同值的文件描述符 - 如果另一个线程很快地进入并打开另一个文件。实现线程安全的唯一方法是检查返回值。 - Philip CoulingEBADF == errno
- Chris Wattsclose()
成功,它不会修改errno
。在调用close()
之前,需要将errno
设置为0
。之后检查文件描述符是否有效也无法在多线程程序或任何其他可以重复使用文件描述符的情况下工作。 - Andrew Henle