开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 17 天,点击查看活动详情。
前言
本篇文章整理了一些Linux系统编程里经常用到的那些函数,供有需要的朋友们来参考学习,如发现描述不当或者有错误的地方,欢迎批评指正,期待大家补充更多的条例一起学习。
一、open函数
-
int open(char *pathname, int flags) #include <unistd.h>参数:
pathname: 欲打开的文件路径名
flags:文件打开方式: #include <fcntl.h>
O_RDONLY|O_WRONLY|O_RDWR O_CREAT|O_APPEND|O_TRUNC|O_EXCL|O_NONBLOCK ....返回值:
成功: 打开文件所得到对应的 文件描述符(整数)
失败: -1, 设置errno
-
int open(char *pathname, int flags, mode_t mode)123 775参数:
pathname: 欲打开的文件路径名
flags:文件打开方式:
O_RDONLY|O_WRONLY|O_RDWR O_CREAT|O_APPEND|O_TRUNC|O_EXCL|O_NONBLOCK ....mode: 参数3使用的前提, 参2指定了 O_CREAT。 取值8进制数,用来描述文件的 访问权限。 rwx 0664
创建文件最终权限 = mode & ~umask
返回值:
成功: 打开文件所得到对应的 文件描述符(整数)
失败: -1, 设置errno
二、close函数
int close(int fd);
三、错误处理函数
注意 与errno 相关。
printf("xxx error: %d\n", errno);
char *strerror(int errnum);
printf("xxx error: %s\n", strerror(errno));
void perror(const char *s);
perror("open error");
四、read函数
ssize_t read(int fd, void *buf, size_t count);
-
参数:
fd:文件描述符
buf:存数据的缓冲区
count:缓冲区大小
-
返回值:
0:读到文件末尾。
成功; > 0 读到的字节数。
失败: -1, 设置 errno
-1: 并且 errno = EAGIN 或 EWOULDBLOCK, 说明不是read失败,而是read在以非阻塞方式读一个设备文件(网络文件),并且文件无数据。
五、write函数
ssize_t write(int fd, const void *buf, size_t count);
-
参数:
fd:文件描述符
buf:待写出数据的缓冲区
count:数据大小
-
返回值:
成功; 写入的字节数。
失败: -1, 设置 errno
六、lseek函数
off_t lseek(int fd, off_t offset, int whence);
-
参数:
fd:文件描述符
offset: 偏移量
whence:起始偏移位置: SEEK_SET/SEEK_CUR/SEEK_END
-
返回值:
成功:较起始位置偏移量
失败:-1 errno
-
应用场景:
-
文件的“读”、“写”使用同一偏移位置。
-
使用lseek获取文件大小
-
使用lseek拓展文件大小:要想使文件大小真正拓展,必须引起IO操作。
-
七、stat/lstat 函数
int stat(const char *path, struct stat *buf);
-
参数:
path: 文件路径
buf:(传出参数) 存放文件属性。
-
返回值:
成功: 0
失败: -1 errno
-
获取文件大小: buf.st_size
-
获取文件类型: buf.st_mode
-
获取文件权限: buf.st_mode
-
符号穿透:stat会。lstat不会。
八、目录操作函数:
示例程序如下
DIR * opendir(char *name);
int closedir(DIR *dp);
struct dirent *readdir(DIR * dp);
struct dirent {
inode
char dname[256];
}