下面是常用的Unix/Linux 系统调用接口,这些函数提供了对文件、设备等资源的访问能力,是 POSIX 标准的一部分。
1. open()
- 函数原型:
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
- 参数:
pathname
:指向要打开或创建的文件路径名的指针。flags
:指定文件打开的方式和行为的一系列标志位。多个标志可以通过按位或运算组合在一起。常用的标志包括:O_RDONLY
:只读方式打开。O_WRONLY
:只写方式打开。O_RDWR
:读写方式打开。O_CREAT
:如果文件不存在,则创建它(需要与mode
参数一起使用)。O_EXCL
:与O_CREAT
一起使用,确保在文件已经存在的情况下open
调用会失败。O_TRUNC
:如果文件存在且以写模式打开,则清空文件内容。O_APPEND
:每次写操作前将文件偏移量设置到文件末尾。O_NONBLOCK
或O_NDELAY
:对于设备特殊文件,设置为非阻塞模式。
mode
:当使用了O_CREAT
标志时,这个参数用来指定新创建文件的权限位(读写执行)。权限位通常通过八进制数来表示,例如0644
对应的是-rw-r--r--
。- 返回值:成功时返回新的文件描述符;失败时返回
-1
并设置errno
。
2. read()
- 函数原型:
ssize_t read(int fd, void *buf, size_t count);
- 参数:
fd
: 文件描述符。buf
: 指向用于存储读取数据的缓冲区。count
: 要读取的最大字节数。
- 返回值:
- 成功时,返回实际读取到的字节数。这可能少于请求的字节数,特别是如果在达到文件末尾或遇到下一个输入记录之前没有更多的数据可读。
- 如果到达了文件的末尾,并且已经读到了一些数据,则返回一个正值,但小于
count
。 - 如果在调用
read
时正好位于文件末尾,或者尝试从管道或 FIFO 中读取并且写端已经被关闭,则返回0,表示没有更多的数据可以读取。 - 失败时,返回-1,并设置
errno
来指示错误类型。
3. write()
- 函数原型:
ssize_t write(int fd, const void *buf, size_t count);
- 参数:
fd
: 文件描述符。buf
: 指向要写入的数据的缓冲区。count
: 要写的字节数。
- 返回值:
- 成功时,返回实际写入的字节数。这可能少于请求的字节数,尤其是在非阻塞I/O的情况下,或者当磁盘已满、超出文件大小限制等情况。
- 如果发生错误,返回-1,并设置
errno
来指示错误类型。
4. lseek()
- 函数原型:
off_t lseek(int fd, off_t offset, int whence);
- 参数:
fd
: 文件描述符。offset
: 偏移量。whence
: 基准点(SEEK_SET
表示从文件开头,SEEK_CUR
表示从当前位置,SEEK_END
表示从文件末尾)。
- 返回值:成功时返回新的文件位置;出错时返回
(off_t) -1
并设置errno
。
5. creat()
- 函数原型:
int creat(const char *pathname, mode_t mode);
- 参数:
pathname
: 文件路径。mode
: 新文件的访问权限。
- 返回值:成功时返回文件描述符;出错时返回
-1
并设置errno
。等同于open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode)
。
6. stat()
- 函数原型:
int stat(const char *pathname, struct stat *statbuf); int fstat(int fd, struct stat *statbuf); int lstat(const char *pathname, struct stat *statbuf);
- 参数:
pathname
: 文件路径;对于fstat
是文件描述符。statbuf
: 获取文件的相关信息(如大小、权限等),并将结果存储在 statbuf 结构体中。
- 返回值:成功时返回
0
;出错时返回-1
并设置errno
。- 使用 stat 获取文件信息时,若路径是符号链接,则返回符号链接指向的实际文件的信息。
- 使用 lstat 可以直接获取符号链接本身的元数据而不跟随到其所指向的实际文件。
7. chmod()
- 函数原型:
int chmod(const char *pathname, mode_t mode); int fchmod(int fd, mode_t mode);
- 参数:
pathname
: 文件路径;对于fchmod
是文件描述符。mode
: 文件的新权限模式。
- 返回值:成功时返回
0
;出错时返回-1
并设置errno
。
8. fsync()
- 函数原型:
int fsync(int fd);
- 参数:
fd
: 文件描述符。- 强制将文件描述符 fd 指向的文件的所有修改同步到磁盘。(掉电保存)
- 返回值:成功时返回
0
;出错时返回-1
并设置errno
。