linux文件操作与系统调用

文件操作:

底层系统调用:

所需头文件:

#include<fcntl.h>

int open(文件路径(const char *),打开方式(只读,只写,读写,创建),文件权限):

其中打开方式:

只读:O_RDONLY

只写:O_WRONLY

读写:O_RDWR

创建:O_CREAT

文件权限:

当要打开的文件不存在时,才会写第三个参数,0600(读写权限)

返回值:

返回值为文件描述符(int)

int read(文件描述符(int),要读到写入的空间(void *),读取个数(int)):

返回值:

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

int write(文件描述符(int),要照着写入文件描述符文件的空间(void *),要写入的个数(int)):

int close(文件描述符(int)):

示例1:

先创建file.txt并写入hello

再从file.txt中读取数据:

运行结果(打印read返回值,并打印读取内容)

示例2:

将一个图片读取并重新写为另一个图片(112.jpg读取并写入200.jpg)

运行结果:

fork与文件操作:

以文件file.txt为例:文件内容为abcdefgh

当我们先打开文件再fork:

运行结果:

我们可以看到子进程是在父进程后面跟着打印,说明父子进程共用一个文件偏移量。

结论:

当我们先fork再打开文件

运行结果:

这时我们可以看到父子进程打印的东西一样,说明他们各自有各自的文件偏移量。

结论:

系统调用与库函数的区别:

系统调用的实现在系统内核中,属于内核空间。库函数的实现在函数库中,属于用户态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦的白鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值