Linux7 文件操作系统调用

操作文件的系统调用

        int open(const char* pathname, int flags);//用于打开一个已存在的文件

        int open(const char* pathname, int flags,mode_t mode);//用于新建一个文件, 并设置访问权限

参数介绍:

 pathname:将要打开的文件路径和名称

lags : 打开标志,如 O_WRONLY 只写打开

O_RDONLY 只读打开

O_RDWR 读写方式打开

O_CREAT 文件不存在则创建

O_APPEND 文件末尾追加

O_TRUNC 清空文件,重新写入

mode: 权限 如:“0600”

返回值:为文件描述符

        ssize_t read(int fd, void* buf, size_t count);

参数介绍:

fd 对应打开的文件描述符

buf 存放数据的空间

count 计划一次从文件中读多少字节数据

返回值:为实际读到的字节数

        ssize_t write(int fd, const void* buf,size_t count);

参数介绍:

fd 对应打开的文件描述符

buf 存放待写入的数据

count 计划一次向文件中写多少数据

int close(int fd);

参数介绍:

fd 要关闭的文件描述符

思考:父进程先打开一个文件,fork 后子进程是否可以共享使用?

1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <unistd.h>
4. #include <string.h>
5. #include <assert.h>
6. #include <fcntl.h>
7. //分析程序执行的打印结果
8. int main()
9. {
10. char buff[128] = {0};
11. //myfile.txt 自己创建,并写入内容为“abcdef”
12. int fd = open("myfile.txt",O_RDONLY);
13.
14. pid_t pid = fork();
15. assert( pid != -1 );
16.
17. if ( pid == 0 )
18. {
19. read(fd,buff,1);
20. printf("child buff=%s\n",buff);
21.
22. sleep(1);
23. read(fd,buff,1);
24. printf("child buff=%s\n",buff);
25. }
26. else
27. {
28. read(fd,buff,1);
29. printf("parent buff=%s\n",buff);
30.
31. sleep(1);
32. read(fd,buff,1);
33. printf("parent buff=%s\n",buff);
34. }
35.
36. close(fd);
37. }

        由于 fork 创建的子进程的 PCB 是拷贝父进程的,子进程的 PCB 中的文件表指向打开文 件的指针只是拷贝了父进程 PCB 中的值,所以父子进程会共享父进程 fork 之前打开的所有 文件描述符。如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值