1、Linux系统编程
文件
进程
线程
网络编程
Linux中一切皆文件,文件操作是最基础最通用的操作
在Linux中,一共有7种文件:
普通文件 -
目录 d
链接 l
管道 p
套接字 s
字符设备 c
块设备 b
2、系统调用
所谓系统调用就是内核提供给应用程序的一组特殊的接口
用户通过这组接口才能使用内核所提供的服务 。
库函数,一般是指标准C库所提供的函数接口,标准C库中的这些函数间接的使用系统调用接口。
3、系统IO
指操作系统提供的对文件的通用操作
主要包括以下接口
open 打开文件
read 读文件
write 写文件
close 关闭文件
lseek 文件定位
mmap 内存映射
4、函数接口说明
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
功能:用于打开 或 创建 文件
参数:
pathname 待打开的文件名,建议带路径,如 "./1.c" "/hom/china/2.txt"
flags 打开标志,以下三个标志,必选其一
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 可读可写
可选标志有很多,常用如下:
O_APPEND 追加写,即原有数据保留,在最后追加新数据
O_CREAT 创建,如果需要创建新文件,必须要有该标志
O_TRUNC 截断(短),即清空原有数据,然后再写新数据
例:如果某个文件不存在,则创建,如果存在则清空,再写数据,则标志写法如下:
O_WRONLY | O_CREAT | O_TRUNC
例:只需要读文件的内容,则标志如下:
O_RDONLY
mode 创建新文件的权限,只有当打开标志中有O_CREAT时,才需要该参数
在程序中,常用8进制表示文件权限
例如:文件权限为 文件所有者可读可写,组用户和其它用户只能读,则权限表示为:
0644
返回:
成功返回一个非负的整数,称这个整数为文件描述符
后续对文件的所有操作都依赖于这个 文件描述符
失败返回-1,同时设置errno
注:
errno是一个系统级别的全局变量,用来表示库函数和系统调用出错了
当函数调用失败时,可以使用以下函数来获取错误信息
perror: 把错误信息以字符串的形式打印出来
strerror:把错误信息以字符串的形式返回
当程序执行时,系统会自动打开三个文件,分别称为 标准输入,标准输出,标准错误
在系统定义了三个宏来表示这三个文件
STDIN_FILENO 0
STDOUT_FILENO 1
STDERR_FILENO 2
当指定权限创建文件时,文件最终的权限是由mode和umask的值一起决定的,
一般情况下,umask的值为0002, 即移除了其它用户的写权限。
--------------------------------------------
#include <unistd.h>
int close(int fd);
功能: 关闭打开的文件
参数: fd 文件描述符
返回:
成功返回0,失败返回-1,同时设置errno
----------------------------------------------
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:用于读文件
参数:
fd 文件描述符,代表要读的那个文件
buf 缓冲区首地址,用于保存从文件中读到的数据,常见如变量的地址,数组名字,malloc的返回值
count 期望从文件中读取的字节数
返回:
成功返回实际读取到的字节数,对于普通文件来说,如果返回0,表示文件读完了
失败返回-1,同时设置errno
ssize_t write(int fd, const void *buf, size_t count);
功能:用于把数据写入文件
参数:
fd 文件描述符,代表要写的那个文件
buf 缓冲区首地址,表示待写入的数据的首地址
count 期望写入文件的字节数
返回:
成功返回实际写入的字节数
失败返回-1,同时设置errno
-----------------------------------------------------------------------
off_t lseek(int fd, off_t offset, int whence);
功能:用于设置文件的读写位置
参数:
fd 文件描述符
offset 偏移量,正数表示往右偏移,负数表示往左偏移
whence 设置偏移量时的参考位置,系统提供三种参考位置:
SEEK_SET 表示文件开始位置
SEEK_CUR 表示文件当前位置
SEEK_END 表示文件末尾位置
返回:
成功返回当前位置到文件开始位置的字节数
失败返回-1,同时设置errno