background image

我们应该使用的模式是 1(设置用户 ID)、0(不设置组 ID)、7(1+2+4,读、写、执
行)、0(没有权限)、5(1+4,读、执行)即 10705  

open("test", O_CREAT, 10705); 

上述语句等价于:

open("test", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID ); 

如果文件打开成功,open 函数会返回一个文件描述符,以后对该文件的

所有操作就可以通过对这个文件描述符进行操作来实现。

读写

在文件打开以后,我们才可对文件进行读写了,Linux 中提供文件读写的

系统调用是 read、write 函数:

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 所指向的文件中,返
回值为实际写入的字节数。

以 O_CREAT 为标志的 open 实际上实现了文件创建的功能,因此,下面

的函数等同 creat()函数:

int open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode); 

定位

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

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

lseek()将文件读写指针相对 whence 移动 offset 个字节。操作成功时,返

回文件指针相对于文件头的位置。参数 whence 可使用下述值:

SEEK_SET:相对文件开头

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