|
在一个进程中多次打开同一个文件,会得到多个不同的文件描述符fd,在关闭文件时也需要关闭全部的文件描述符。 测试: #include #include #include #include #include int main() { int fd1,fd2,fd3,fd4; fd1 = open("ftest1", O_RDWR); fd2 = open("ftest1", O_RDWR); fd3 = open("ftest1", O_RDWR); fd4 = open("ftest1", O_RDWR); printf("fd1=%d, fd2=%d, fd3=%d, fd4=%dn", fd1, fd2, fd3, fd4); close(fd1); close(fd2); close(fd3); close(fd4); return 0; } 编译运行并查看测试结果 fd1=3, fd2=4, fd3=5, fd4=6 从打印结果可知,四次调用open函数得到的文件描述符分别为 3、4、5、6,通过任何一个文件描述符对文件进行IO操作都是可以的,但是需要注意是,调用open函数打开文件使用的是什么权限,则返回的文件描述符就拥有什么权限,文件 IO 操作完成之后,在结束进程之前需要使用close关闭各个文件描述符。 当调用open函数时,会将文件数据从磁盘等块设备读取到内存中,内存中的这份文件数据就称为动态文件,即使多次打开同一个文件,内存中也只有一份动态文件,即文件数据是被不同文件描述符共享的,而不同文件描述符所对应的读写位置偏移量是相互独立的。 因此,对先打开的文件描述符写入内容,可能会被后打开的文件描述符的写入内容覆盖掉,当然open使用O_APPEND或者通过lseek即可避免。
|