Linux 文件 IO:系统调用 open/read/write 完整总结

文件IO

文件IO: Linux内核提供的文件操作接口。属于系统调用。

学习接口:

  1. 打开文件 : open()
  2. 读文件、写文件 : read() 、write()
  3. 关闭文件 : close()

函数接口:

open

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

int open ( const char *pathname, int flags );

int open ( const char *pathname, int flags, mode_t mode );

功能:打开一个文件并获得一个文件描述符

参数 :

pathname:要打开的文件的文件名

flags:打开方式

O_RDONLY :只读

O_WRONLY :只写

O_RDWR :读写

O_CREAT :创建

O_TRUNC : 清空

O_APPEND : 追加

"r" O_RDONLY

"r+" O_RDWR

"w" O_WRONLY | O_TRUNC | O_CREAT, 0664

"w+" O_RDWR | O_TRUNC | O_CREAT,0664

"a" O_WRONLY | O_CREAT | O_APPEND, 0664

"a+" O_RDWR | O_CREAT | O_APPEND, 0664

mode:用户自己、同组用户、其他用户对该文件的读写执行权限

(mode & ~umask)

普通文件:0664

权限给满:0777

rwxrwxr-x

返回值:

成功:文件描述符

失败:-1

文件描述符:

当打开一个文件时,系统会为已打开的文件分配一个文件描述符用来标记该文件。

文件描述符 :小的,非负的整形数据

操作系统默认可分配出的文件描述符:0-1023: 总共1024个

文件描述符的分配原则:最小未被使用

系统默认已打开的文件:

标准IO: 文件IO

FILE* int

stdin 0(STDIN_FILENO)

stdout 1(STDOUT_FILENO)

stderr 2 (STDERR_FILENO)

close

#include <unistd.h>

int close (int fd );

功能:关闭文件

参数:

fd:文件描述符

返回值:

成功:0

失败:-1

注意:

只打开文件,使用完不关闭文件会造成文件描述符泄露

write

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

功能:向文件中写入数据

参数:

fd :要写入的文件描述符

buf:要写入的数据首地址

count:希望写入的字节数

返回值:

成功:实际写入的字节数

失败:-1

read

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

功能:从文件中读取数据

参数:

fd:要读的文件的文件描述符

buf:存储读取数据的空间首地址

count:希望读到的字节数

返回值:

成功:返回实际读到的字节数

失败:-1到达文件文件末尾:

文件拷贝:

复制代码
int file_copy(const char *srcfile, const char *dstfile)
{
int fdsrc = open(srcfile, O_RDONLY);
int fddst = open(dstfile, O_WRONLY | O_CREAT | O_TRUNC, 0664);
if (-1 == fdsrc || -1 == fddst)
{
printf("open error\n");
return -1;
}
char buff[1024] = {0};
ssize_t size = 0;
while ((size = read(fdsrc, buff, sizeof(buff))) > 0)
{
write(fddst, buff, size);
}
close(fdsrc);
close(fddst);
return 0;
}

文件定位函数:

主要用在对普通文件操作 普通文件、硬件设备类相关的文件

lseek()

off_t lseek(int fd, off_t offset, int whence);

功能:重新定位文件的读写位置

参数:

fd:文件描述符

offset:偏移量

whence:要偏移的起始位置

SEEK_SET :从文件开头偏移

SEEK_CUR: 从当前读写位置偏移

SEEK_END :从文件末尾偏移

返回值:

成功:返回当前读写位置到文件开头的偏移量

失败:-1

相关推荐
一去不复返的通信er2 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
0+1113 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋3 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家4 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890754 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻4 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
程序 代码狂人5 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade6 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
2601_949847756 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_639906946 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端