您的位置:首页 > 运维架构 > Linux

linux c/c++ 编程之-----文件目录操作

2013-11-03 22:18 585 查看
linux 文件操作 open close read write

当我们需要打开一个文件进行读写操作的时候,我们可以使用系统调用函数 open.使用完

成以后我们调用另外一个 close 函数进行关闭操作.

#include <fcntl.h>;

#include <unistd.h>;

#include <sys/types.h>;

#include <sys/stat.h>;

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 <unistd.h>;

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 <unistd.h>;

int access(const char *pathname,int mode);

pathname:是文件名称,mode 是我们要判断的属性.可以取以下值或者是他们的组合.

R_OK 文件可以读,W_OK 文件可以写,X_OK 文件可以执行,F_OK 文件存在.

当我们测试成功时,函数返回 0,否则如果有一个条件不符时,返回-1.

如果我们要获得文件的其他属性,我们可以使用函数 stat 或者 fstat.

目录操作

在我们编写程序的时候,有时候会要得到我们当前的工作路径。C 库函数提供了 getcwd 来解决这个问题。

#include <unistd.h>;

char *getcwd(char *buffer,size_t size);

我们提供一个 size 大小的 buffer,getcwd 会把我们当前的路径考到 buffer 中.如果 buffer太小,函数会返回-1 和一个错误号

Linux 提供了大量的目录操作函数,我们学习几个比较简单和常用的函数.

#include <dirent.h>;

#include <unistd.h>;

#include <fcntl.h>;

#include <sys/types.h>;

#include <sys/stat.h>;

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 函数.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: