我们应该使用的模式是 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:相对文件读写指针的当前位置