一. IO函数区别
标准c库IO函数有缓冲区,当达到指定条件才集体调用一次Linux系统函数,将缓冲区数据一次性读取。
二. 虚拟地址空间
虚拟地址空间不是真实存在的,只有当程序运行起来才会由系统映射到真实物理空间中,实际不会占用那么大内存。
虚拟地址空间结构:
虚拟地址空间由两部分构成,内核区和用户区,内核区有进程管理,内存管理,设备驱动管理,虚拟文件系统等,用户可以通过系统调用API来操作内核区,例如read和write函数。
用户区层数比较多,有环境变量区,命令行参数,栈空间,共享库,堆空间,未初始化全局变量区,初始化全局变量区,二进制代码段,受保护的地址如nullptr等。
三. 文件描述符
文件描述符在内核区进程管理中,有一个文件描述符数组用来存储,0,1,2分别是标准输入,标准输出和标准错误,他们指向的是当前终端,文件描述符数组最大长度是1024。
四. Linux系统函数
首先是各种头文件,error.h用于用户自定义输出错误信息。
sys/stat.h获取文件属性
stdio.h标准c库函数调用
fcntl.h linux系统函数调用
sys/types.h 各种类型声明
系统函数通过 man 2 open命令查看详情
打开文件open函数
int fd=open(const char* pathname, int flags);
int fd=open (const char* pathname, int flags, mode_t mode);
c语言中通过可变参数实现类似c++中函数重载的功能
flags中有三个互斥参数: O_RDONLY, O_WRONLY, O_RDWR, 4个字节即32位。
虽然3种主标志是互斥的,但却可以叠加副标志如O_CREAT,当文件不存在时创建该文件,用|叠加(即32位标记位进行或运算)。
mode 无符号8进制数表示该新增文件的权限,最高为0777,因为rwx二进制最大为7,而有用户权限,组权限和其他组对该文件的权限,其中x是可执行的意思。
int close(int fd);关闭文件描述符,因为每个文件都会产生一个文件描述符。
write函数
read函数
lseek函数
拓展文件长度作用:可以提前占用指定大小内存。
stat, lstat函数
stat函数用于获取文件信息
access函数
用来判断某个文件是否有某项权限或是否存在
chmod函数
用来修改文件权限
chown修改文件所有者
通过vim /etc/passwd查看用户的id
通过vim /etc/group来查看组id
使用useradd命令增加新用户
id ikun 可以查看用户id,组Id
truncate函数
它用于修改文件大小
目录操作函数
mkdir函数
创建一个新目录
rmdir函数
删除一个空目录