系统编程(二)文件IO之常用API open write lseek read close
2023-09-14 09:16:39 时间
接下来几节我们将重点介绍系统编程文件IO方面比较常用的API,并辅以相关代码,由浅入深,层层递进,这一节我们介绍文件操作中最基本的open(),write(),close(),lseek()四个函数
首先我们来先一下。
这里我们先来看看这些函数的原型
有时候我们不记得相关函数的原型了,在linux命令行中查询,例如要查看open函数,可以用
man 2 open
相关知识在上一节中有介绍,详细内容请参阅上一篇文章。
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname:打开文件的路径名
flags:用来控制打开文件的模式
mode:用来设置创建文件的权限(rwx)。当flags中带有O_CREAT时才有效。
返回值: 调用成功时返回一个文件描述符fd,调用失败时返回-1,并修改errno
ssize_t read(int fd, void *buf, size_t count);
fd:指定要读取的文件句柄
buf:用来存储读取的内容,一般我们会在应用程序中提前设置好读取的缓冲区
count:读取文件内容的长度,单位是字节
返回值:ssize_t类型是linux内核用typedef重定义的一个类型(其实就是int),返回值表示成功读取的字节数
count是我们想读取的字节数,而read返回值为我们实际读取的字节数
off_t lseek( int filedes, off_t offset, int whence );
filedes:指定文件句柄
whence:
取SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节
取SEEK_CUR,则将该文件的偏移量设置为其当前位置加offset,offset可为正或负
取SEEK_END,则将新文件的偏移量设置为文件长度加上offset,offset可为正或负
返回值:若成功则返回新的文件偏移量,若出错则返回-1
int close(int fd);
fd:指定要关闭的文件句柄
返回值:成功返回0,出错返回-1并设置errno
下面是对这几个函数的简单应用
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd;
char wbuf[] = "Hello World";
char rbuf[10];
if((fd = open("demo2.txt", O_RDWR | O_CREAT)) < 0)//打开文件
{
printf("open file failed\n");
}
if(write(fd, wbuf, sizeof(wbuf)) != sizeof(wbuf))//在文件中写入hello World
{
printf("write wbuf error\n");
}
if(lseek(fd, 6, SEEK_SET) == -1) //将读写指针移到距离开始6个字节的地方
{
printf("lseek error\n");
}
if(read(fd, rbuf, 5) != 5)//开始读取
{
printf("read error\n");
}
printf("rbuf = %s\n",rbuf);
return 0;
}
最终会输出”World”
相关文章
- 文件路径超过系统限制_linux文件名长度限制
- python处理xps文件_如何在Windows 10系统中处理XPS文件
- 题目1-安卓手机文件分析取证(Wi-Fi名称)
- rsync远程同步文件_ssh远程登录
- 【Groovy】IntelliJ IDEA 中创建 Gradle 工程 ( Gradle 工程目录文件分析 )
- TRICONEX D06603 生产数据保存到文件中
- 文件图片上传详解手机开发
- Java 使用 NIO 方式读文件详解编程语言
- 利用Linux系统实现文件传输(从linux系统传输文件)
- 探索Linux系统中的DTSI文件(linuxdtsi)
- [开源项目] 系统或软件找不到特定的dll文件?试试批量安装VC运行库
- 文件Linux系统快速复制文件的方法(linux系统复制)
- Linux系统:快速清理日志文件(linux日志删除)
- 文件掌握Linux系统:LS查看隐藏文件(linuxls隐藏)
- 标题:深入探索Redis的Log文件(redis的log文件)
- Linux系统声卡设备操作手册(linux声卡设备文件)
- 如何在Linux下快速打包文件:简易教程分享(linux下打包)
- 系统支持的文件大小(linux最大的文件)
- Linux系统中文件复制的快速操作:cp命令(linux 文件复制命令)
- 查看 Linux 系统中大文件的方法(linux 查看大文件)
- Linux系统中快速确定文件权限的方法(linux判断文件权限)