ARM技术论坛
直播中

嵌入式小能手

2年用户 1499经验值
擅长:嵌入式技术
私信 关注
[经验]

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

在一个进程中多次打开同一个文件,会得到多个不同的文件描述符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即可避免。

更多回帖

发帖
×
20
完善资料,
赚取积分