Linux——操作文件的系统调用(open、write、read、close)

目录

一、退出码

二、操作文件的系统调用

1、open():打开一个文件

2、read():从文件中读取数据

3、write():向文件中写入数据

4、close():关闭文件

三、例题演示

1、利用读和写对文件进行复制

一、退出码

man 2 wait  查看帮助手册

WIFEXIRED:正常退出的状态 

WEXITSTATUS:获取退出码二

else//父进程
 {
 s="parent";
 n=7;
 int val;
 wait(&val);
 if(WIFEXITED(val))//正常退出的状态
 {
    printf("val=%d\n",WEXITSTATUS(val));
 }
// wait(NULL); //不要退出码
 }

二、操作文件的系统调用

 C语言处理文件的几个库函数:fopen、fread、fwrite、fclose;

1、open():打开一个文件

 参数:

pathname:文件的路径和名称
flags:文件的打开方式
mode:文件的权限,如“0600”
返回值:返回整型,就是文件描述符

 flag的打开标志:

O_WRONLY:只写打开;
O_RDONLY:只读打开;
O_RDWR:读写方式打开;
O_CREAT:文件不存在则创建;
O_APPEND:文件末尾追加;
O_TRUNC:清空文件,重新写入; 

2、read():从文件中读取数据

 man 2 read
头文件:<unistd.h>
参数:
fd:对应打开的文件描述符h3
buf:把文件内容读取到一块空间buf中
count:期望要读取的字节数
返回值:ssize_t :实际读取了多少个字节;

3、write():向文件中写入数据

头文件:<unistd.h>

参数:
    fd:对应打开的文件描述符
    buf:写入的文件内容
    count:要写入多少个字节
    返回值:ssize_t :实际写入了多少个字节; 

4、close():关闭文件

文件描述符:0,1,2
标准输入对应的编号:0 stdin 
标准输出对应的编号:1 stdout
标准错误输出对应的编号:2 stderror

文件描述符是最小未被使用的一项。

三、例题演示

1、利用读和写对文件进行复制

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>
int main()
{
int fdr=open("file.txt",O_RDONLY);
int fdw=open("newfile.txt",O_WRONLY|O_CREAT,0600);
if(fdr==-1||fdw==-1)
{
exit(0);
}
char buff[256]={0};
int num=0;
while((num=read(fdr,buff,256))>0)
{
write(fdw,buff,num);
}
close(fdr);
close(fdw);
exit(0);
}

如有错误,敬请指正。

您的收藏与点赞都是对我最大的鼓励和支持!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在C语言使用系统调用openreadwrite需要包含头文件<fcntl.h>和<unistd.h>。 下面是一个简单的例子,展示如何使用这些系统调用来打开一个文件读取的内容并将其写入另一个文件: ```c #include <fcntl.h> #include <unistd.h> int main() { // 打开源文件 int source_fd = open("source.txt", O_RDONLY); if (source_fd == -1) { perror("open source.txt"); return 1; } // 打开目标文件 int dest_fd = open("dest.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644); if (dest_fd == -1) { perror("open dest.txt"); return 1; } // 读取文件的内容并写入目标文件 char buffer[4096]; ssize_t bytes_read; while ((bytes_read = read(source_fd, buffer, sizeof(buffer))) > 0) { ssize_t bytes_written = write(dest_fd, buffer, bytes_read); if (bytes_written != bytes_read) { perror("write"); return 1; } } if (bytes_read == -1) { perror("read"); return 1; } // 关闭文件 if (close(source_fd) == -1) { perror("close source_fd"); return 1; } if (close(dest_fd) == -1) { perror("close dest_fd"); return 1; } return 0; } ``` 在这个例子,首先使用open打开源文件和目标文件,并检查是否成功打开。然后,使用read从源文件读取数据,使用write将数据写入目标文件。最后,使用close关闭文件。 需要注意的是,在readwrite,我们使用了一个缓冲区,大小为4096字节。这是为了避免频繁地进行系统调用,提高效率。此外,在open,我们使用了一些标志来指定文件的打开方式,例如O_RDONLY表示只读模式,O_WRONLY表示只写模式,O_CREAT表示文件不存在则创建,O_TRUNC表示在打开文件时将其截断为0字节。最后一个参数0644表示文件权限,其6表示读和写的权限,4表示只读权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sweep-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值