首页 > 代码库 > Linux的文件操作

Linux的文件操作

 

1. 创建

int creat(const char *filename, mode_t mode);

参数mode指定文件的存取权限,mode同umask一起决定文件的最终权限(mode&umask),umask代表了文件在创建时需要去掉的一些存取权限。

umask可通过系统调用umask()来改变:

int umask(int newmask);

该调用将umask设置为newmask,函数返回旧的umask权限,它只影响读,写和执行的权限。

 

2. 打开

int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);

open()函数有两种方式,其中pathname是文件路径名,缺省默认为当前路径下。

flags表示如下:

O_RDONLY, O_WRONLY, O_RDWR三个标志只能使用其中的一个,

如果使用了O_CREAT标志,则使用函数必须指定mode用来表示文件的访问权限,

int open(const char *pathname, O_CREAT, mode_t mode);

mode表示如下:

 

3. 读写

文件open后我们返回一个fd(文件描述符),我们通过文件描述符才能进行读写,

int read(int fd, const void *buf, size_t length);int write(int fd, const void *buf, size_t length);

其中buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位)。

函数read()实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。

函数write()实现将length个字节,从buf所指向的缓冲区中写入到文件描述符fd所指向的文件中,返回值为实际写入的字节数。

 

4. 定位

对于随机文件,我们可以随机的指定位置读写,可使用如下函数进行定位:

int lseek(int fd, offset_t offset, int whence);

lseek()将文件读写指针相对whence移动offset个字节。操作成功,返回文件指针相对于文件头的位置。

参数whence可使用下述值:

SEEK_SET: 相对文件开头

SEEK_CUR: 相对文件读写指针的当前位置

SEEK_END: 相对文件末尾

offset可取负值,lseek(fd,-5,SEEK_CUR)文件指针相对于当前位置向前移动5个字节。

由于lseek函数返回文件开头到当前指针的字节长度,所以lseek(fd, 0, SEEK_END)返回的就是整个文件长度。

 

5. 关闭

int close(int fd);

 

Linux的文件操作