文件描述符
文件描述符:是一个非零的正整数,他表示了当前程序正在处理的进程,用来区分程序运行中的各个文件
在新建或打开文件时,内核会向进程返回一个文件描述符,文件描述符也作为函数参数来帮助函数正常工作
通常,一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理:
这3个文件分别对应文件描述符0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。
一、open()
用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数
二、read()
用于将从指定的文件描述符中读出的数据放到缓存区中,并返回实际读入的字节数
三、write()
用于向打开的文件写数据,写操作从文件的当前指针位置开始
四、lseek()
用于在指定的文件描述符中将文件指针定位到相应的位置
它只能用在可定位(可随机访问)文件操作中。管道、套接字和大部分字符设备文件是不可定位的,所以在这些文件的操作中无法使用lseek()调用
五、close()
用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭(不显示地关闭)
使用示例
#include <syc/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> //使用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;
}