文件IO
C语言中有文件IO相关的库函数(fopen等),他的实际上是经过了某些步骤,然后调用linux系统调用。
这篇文章,要讲的是linux系统调用的文件IO,如open,close,read等。
预备知识
文件描述符
在linux中,程序打开的文件,会有一个整数指向它,这就叫文件描述符。通过对文件描述符进行操作,就能实际操作到打开的文件上。
文件描述符默认从3开始分配,因为0,1,2已经被占用,分别是标准输入,标准输出以及标准错误,这3个都指向当前终端。每打开一个新的文件,都会分配最小的未使用的文件描述符(系统做这个工作)。
man
linux的官方文档就是man手册,在学习系统调用时候查阅man手册很重要。系统函数在man的第2卷,比如想要查阅open系统函数可以输入man 2 open
。
perror()
打印errno所代表的错误信息。
// 所需头文件(之后将不再解释
#include <stdio.h>
void perror(const char *s);
s是展示给用户的字符串。
IO system call
open()
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, or O_RDWR)。还有一些可选的,可以用按位或来选中。可选项如下:
- O_APPEND:使用追加模式打开文件。
- O_CREAT:如果文件不存在将创建文件。
- mode:创建文件的权限,八进制形式(如0777)。不过文件最终权限=mode&~umask。(通过命令
umask
来查看)。
返回值是文件描述符(>0),如果文件打开失败,将返回-1,并设置errno。
read()
read函数用来从文件中读取数据。
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
- fd:要读取的文件的文件描述符。
- buf:要把读取到的数据存到哪里
- count:读取的大小
返回值是实际读取到的大小,如果>0表示读取正常,如果=0表示读完文件了,如果=-1表示读取错误,并设置errno。
write()
write函数用来在文件中写入数据。
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
- fd:要写入的文件的文件描述符。
- buf:要写入的数据的地址
- count:写入的大小
返回值是实际读写入的大小,如果=-1表示写入错误,并设置errno。
标签:文件,int,描述符,IO,Linux,include,open From: https://www.cnblogs.com/1v7w/p/17324425.html