Linux下一切都是文件 ,对于文件的操作,我们需要用文件操作符来指定。文件一般经过创建过程才会分配文件描述符,可以把它理解为方便称呼操作系统创建的文件而赋予的数。
文件描述符fd | 对象 |
---|---|
0 | 标准输入 |
1 | 标准输出 |
2 | 标准错误 |
需要的头文件:#include
,#include
,#include
函数原型:
int open(const char *path,int flag)
int fd;
fd = open("data.txt",O_CREAT|O_WRONLY|O_TRUNC);
//文件名为data.txt。必要时创建、只写、删除现有数据
if(fd == -1) //打开失败
//do something
所需头文件#include
函数原型int close(int fd)
egclose(fd);
所需头文件#include
函数原型ssize_t write(int fd,const void* buf,size_t nbytes)
eg
int fd;
char buf[]="Lets go!\n";
if(write(fd,buf,sizeof(buf)) == -1)
//do something
所需头文件#include
函数原型ssize_t read(int fd,void* buf,size_t nbytes);
创建.c文件
touch low_open.c
使用vim编辑
vim low_open.c
#include
#include
#include
#include
void error_handling(char* message);
int main()
{
int fd;
char buf[]="Lets go!\n";
fd = open("data.txt",O_CREAT|O_WRONLY|O_TRUNC);//必要时创建、只写、删除现有数据
if(fd == -1) //打开失败
error_handling("open() error");
printf("file descriptor: %d \n",fd);//输出文件描述符
if(write(fd,buf,sizeof(buf)) == -1)
error_handling("write() error");
close(fd); //使用文件后必须关闭
return 0;
}
void error_handling(char* message)
{
fputs(message,stderr);//把message写到指定流
fputc('\n',stderr);
exit(1);
}
编译
gcc low_open.c -o lopen
运行
./lopen
返回的文件描述符是3
此时当前目录下有三个文件ls
命令查看,open函数新生成了一个data.txt
查看data.txt
cat data.txt
同样创建low_read.c编译运行
#include
#include
#include
#include
#define BUF_SIZE 100
void error_handling(char* message);
int main()
{
int fd;
char buf[BUF_SIZE];
fd = open("data.txt",O_RDONLY);
if(fd == -1)
error_handling("open() error");
printf("file descriptor: %d \n",fd);
if(read(fd,buf,sizeof(buf)) == -1)
error_handling("read() error");
printf("file data: %s",buf);
close(fd);
return 0;
}
void error_handling(char* message)
{
fputs(message,stderr);
fputc('\n',stderr);
exit(1);
}