Linux_ 5.2、Linux下文件I/O函数的使用(不带缓存)

本文脉络

  • 文件描述符
  • 一、open()
  • 二、read()
  • 三、write()
  • 四、lseek()
  • 五、close()
  • 使用示例


文件描述符

文件描述符:是一个非零的正整数,他表示了当前程序正在处理的进程,用来区分程序运行中的各个文件


在新建或打开文件时,内核会向进程返回一个文件描述符,文件描述符也作为函数参数来帮助函数正常工作


通常,一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理:
这3个文件分别对应文件描述符0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。

一、open()

用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数
Linux_ 5.2、Linux下文件I/O函数的使用(不带缓存)_第1张图片



二、read()

用于将从指定的文件描述符中读出的数据放到缓存区中,并返回实际读入的字节数
Linux_ 5.2、Linux下文件I/O函数的使用(不带缓存)_第2张图片



三、write()

用于向打开的文件写数据,写操作从文件的当前指针位置开始
Linux_ 5.2、Linux下文件I/O函数的使用(不带缓存)_第3张图片



四、lseek()

用于在指定的文件描述符中将文件指针定位到相应的位置

它只能用在可定位(可随机访问)文件操作中。管道、套接字和大部分字符设备文件是不可定位的,所以在这些文件的操作中无法使用lseek()调用
Linux_ 5.2、Linux下文件I/O函数的使用(不带缓存)_第4张图片



五、close()

用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭(不显示地关闭)
Linux_ 5.2、Linux下文件I/O函数的使用(不带缓存)_第5张图片



使用示例

#include 
#include 
#include 
#include 	//使用I/O函数需要包含的头文件

int main()
{
	int fd_src;		//存放源文件的文件描述符
	int fd_dest;	//存放目标文件的文件描述符
	char buff[10];	//定义10字节的缓冲区
	int count;		//计数器
	
	fd_src=open("./src.txt",O_RDONLY);
	if(fd_src<0)
	{
		perror("Failed to open src.txt");
		return -1;	//若打开失败则退出程序
	}
	
	fd_dest=open("./dest.txt",O_RDWR|O_CREAT,0600);	
	//↑ 若无dest.txt文件,则创建,且文件权限为0600(文件所有者有读写权限)
	if(fd_dest<0)
	{
		perror("Failed to open dest.txt");
		return -1;
	}
	
	while((count=read(fd_src,buff,10))!=0)	
	//读取源文件10个字符到buff中,返回成功读取的字节数到count,若count为0,则表读文件到末尾,退出循环
	{
		write(fd_dest,buff,count);	//将buff中的count个字符送入目标文件
	}
	close(fd_src);
	close(fd_dest);	//关闭文件
	return 0;	
}

你可能感兴趣的:(如何玩转Linux系统)