linux 文件操作 open close read write
当我们需要打开一个文件进行读写操作的时候,我们可以使用系统调用函数 open.使用完
成以后我们调用另外一个 close 函数进行关闭操作.
#include
; #include
; #include
; #include
;
int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
int close(int fd);
open 函数有两个形式.
其中 pathname 是我们要打开的文件名(包含路径名称,缺省是认为在当前路径下面).
lags 可以去下面的一个值或者是几个值的组合.
O_RDONLY:以只读的方式打开文件.
O_WRONLY:以只写的方式打开文件.
O_RDWR:以读写的方式打开文件.前面三个标志只能使用任意的一个.
O_APPEND:以追加的方式打开文件.
O_CREAT:创建一个文件.
O_EXEC:如果使用了 O_CREAT 而且文件已经存在,就会发生一个错误.
O_NOBLOCK:以非阻塞的方式打开一个文件.
O_TRUNC:如果文件已经存在,则删除文件的内容.
如果使用了 O_CREATE 标志,那么我们要使用 open 的第二种形式.
要指定 mode 标志,用来表示文件的访问权限.mode 可以是以下情况的组合.
文件打开了以后,我们就要对文件进行读写了.我们可以调用函数 read 和 write 进行文件的读写.
#include
; ssize_t read(int fd, void *buffer,size_t count);
ssize_t write(int fd, const void *buffer,size_t count);
fd 是我们要进行读写操作的文件描述符,
buffer 是我们要写入文件内容或读出文件内容的内存地址.
count 是我们要读写的字节数.
对于普通的文件 read 从指定的文件(fd)中读取 count 字节到 buffer 缓冲区中(记住我们必须提供一个足够大的缓冲区),同时返回 count.
如果 read 读到了文件的结尾或者被一个信号所中断,返回值会小于 count.如果是由信号中断引起返回,而且没有返回数据,read 会返回-1,且设置 errno 为 EINTR.当程序读到了文件结尾的时候,read 会返回 0.
write 从 buffer 中写 count 字节到文件 fd 中,成功时返回实际所写的字节数.
文件的属性
文件具有各种各样的属性,除了我们上面所知道的文件权限以外,文件还有创建时间,大小等等属性.
有时侯我们要判断文件是否可以进行某种操作(读,写等等).这个时候我们可以使用 access 函数.
#include
; int access(const char *pathname,int mode);
pathname:是文件名称,mode 是我们要判断的属性.可以取以下值或者是他们的组合.
R_OK 文件可以读,W_OK 文件可以写,X_OK 文件可以执行,F_OK 文件存在.
当我们测试成功时,函数返回 0,否则如果有一个条件不符时,返回-1.
如果我们要获得文件的其他属性,我们可以使用函数 stat 或者 fstat.
目录操作
在我们编写程序的时候,有时候会要得到我们当前的工作路径。C 库函数提供了 getcwd 来解决这个问题。
#include
; char *getcwd(char *buffer,size_t size);
我们提供一个 size 大小的 buffer,getcwd 会把我们当前的路径考到 buffer 中.如果 buffer太小,函数会返回-1 和一个错误号
Linux 提供了大量的目录操作函数,我们学习几个比较简单和常用的函数.
#include
; #include
; #include
; #include
; #include
; int mkdir(const char *path,mode_t mode);
DIR *opendir(const char *path);
struct dirent *readdir(DIR *dir);
void rewinddir(DIR *dir);
off_t telldir(DIR *dir);
void seekdir(DIR *dir,off_t off);
int closedir(DIR *dir);
struct dirent {
long d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[NAME_MAX+1]; /* 文件名称 */
mkdir 很容易就是我们创建一个目录,opendir 打开一个目录为以后读做准备.readdir 读一个打开的目录.rewinddir 是用来重读目录的和我们学的 rewind 函数一样.closedir 是关闭一个目录.telldir 和 seekdir 类似与 ftee 和 fseek 函数.