Linux_linux基础IO

标准库io接口:fopen close fwrite fread fseak

​ r:

​ r+

​ w

​ w+

​ a

​ a+

stdout stdin stderr 类型: FILE* 文件流指针

注意:文件中包含任意数据处理时要小心,使用完之后要使用fclose关闭避免资源泄露

标准库io接口的操作句柄是FILE*结构体是文件流指针

系统调用接口

​ open write read close lseek

​ int open(const char* pathname , int flags, mode_t mode);

​ pathname:文件路径

​ flags:选项标志

​ 必选项:

​ O_RDONLY

​ O_WRONLY

​ O_RDWR

​ 可选项:

​ O_CREAT

​ O_EXCL

​ O_TRUNC

​ O_APPEND

mode:创建文件时给定权限(八进制)

mode&(umask)

返回值创建成功返回文件描述符一个数字,失败返回-1

write:

ssize_t write(int fd,const void* buf,size_t count)

fd:文件描述符

buf:向文件写入数据

count:要写入的数据的长度

返回值:实际写入数据的长度,错误-1

文件描述符文件流指针

标准库函数使用文件流指针 FILE

系统调用接口使用文件描述符: int

库函数系统调用接口:上下级关系

fwrite(“hello”,fd)—>write(“hello,fd”)

文件流指针结构体中就包含了文件描述符,当使用标准库函数进行io操作时则通过文件流指针找到文件描述符

进行操作

printf函数打印数据时,如果没有刷新缓冲区,数据不会直接写入文件而是先写入缓冲区

内核态:功能需要操作系统完成

用户态:用户自己就可以处理

文件描述符:数组下标,进程每打开一个文件都会使用struct file描述这个文件,并将信息添加到pcbstruct file结构中,并且存放到struct file数组中,返回数组下标作为文件描述符用户通过文件描述符对文件进行操作,在内核实际上通过文件描述符找到文件描述信息,进而操作文件

文件描述符分配规则:
最小未使用:

重定向 int dup2(int oldfd , int newfd)如果newfd已有打开文件则关闭它

文件系统:

Linux:ext2

文件存储流程:通过iNode_bitmap在iNode table找到空闲的iNode结点,通过data_bitmap在数据块区域找到空闲的数据块,将数据块信息记录到iNode结点中,将数据写入数据块,将文件名和iNode节点号写到父目录文件中

cat ./a.txt 流程:在当先目录文件中查找文件名信息,通过文件名获得iNode结点号,通过iNode结点号找到iNode结点,进而访问数据块读取数据进行打印

软连接和硬连接

创建硬链接 ln

创建软连接文件 ln -s

软连接是一个独立的文件,iNode结点不同

硬链接是源文件的另一个名字,iNode结点相同

删除源文件,软连接失效硬链接无影响

软连接 可以跨分区建立

静态库/动态库:生成/使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值