标准c库IO函数与Linux基础

一. 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函数

删除一个空目录

chdir函数
getcwd函数
目录遍历函数
复制文件描述符
fcntl函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值