扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard-文件I/O的了解探究之多次打开文件

2025/11/27
417
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在一个进程中多次打开同一个文件,会得到多个不同的文件描述符fd,在关闭文件时也需要关闭全部的文件描述符。

测试:

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

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即可避免。

相关推荐