(笔记demo)Linux系统编程 文件IO部分笔记

1.直接对系统进行操作通常是很慢的,比如c语言标准库的IO部分在内存里开辟了新的缓存区用于减少系统read(),write()的调用,提高了效率,原因:多次调用系统会导致pc指针在内核与用户之间来回跳转,这是很不明智的

优先使用库函数,缓冲区有三种模式,全缓冲,半缓冲,无缓冲,分别对应是否延时,无缓冲类比为即时收发数据

2.open(),write(),read(),以及其他的函数等等,,,都是直接对系统进行操作,

        有两种常用接口

        1.文件结构体,文件描述符fd

                fd存在文件描述符表(实质是一个指针数组)中,fd实际就是该表的下标,每次操作就对下标对应的文件操作,句柄思想,标准输入输出错误都是文件,是被tty(终端)自动打开的,状态阻塞,占据表中的0,1,2下标,可以被重定向,文件描述符会分配当前表中最小的下标

        2.文件路径

3.主函数参数  int *argc,int **argv    常用

4.分配的文件描述符是最小的,标准输入输出错误占据了012,所以最小为3

5.三种状态,

        睡眠:等待唤醒

        运行:正在运行

        就绪:已经唤醒等待排队

6.睡眠态会导致进程卡住,虽然不占用cpu资源,但是无法执行其他程序,此时运用轮询机制,循环内不断访问,但是每次询问结束使用sleep(1),延时一秒执行其他程序,一秒对于计算机来说已经很长了

7.可以用fseek的ftell来测量文件大小,文件尾部使用ftell

8.fcntl得到文件状态

9.重定向操作时,重定向部分被shell自动替换,不算入参数范围

10.ioctl得到窗口大小,宏TIOCGWINSZ

11.mmap()可以将磁盘中的数据映射到内存中然后进行操作,munmap()关闭映射

12.文件系统各有不同,但大都由ext2发展而来,文件系统虽然不同,但由vfs(虚拟系统)统一

13.文件系统逻辑为

根目录inode表》》》目录块地址》》》文件名匹配》》》文件名对应inode表地址》》》文件inode表》》》文件块地址也就是文件内容

14.stat可以查看inode信息,因为目录文件类型某些情况的不兼容,无法使用目录操作的dirread读取,所以,可以用stat查看

15.目录操作与普通文件不同

16.dup可以进行文件进程的复制与重定向,重定向时会断开之前的链接,例如:将标准输出重定向到fd4,原本fd1就将不再指向标准输出

17.   软链接:独立的链接文件,有自己的inode,

        硬链接:原文件的别名,和原文件指向同一个inode

18.  l 开头的函数,比如lstat,是对 链接文件 自己操作,而不是对链接文件的链接对象进行操作

19. 同一个磁盘内部的文件复制粘贴很快,因为实际上只是将inode表复制粘贴,文件内容并没有移动,通过移动后的inode表里的数据地址依然可以访问到文件内容,类似于,只是移动了查找文件的地址,并没有移动文件本身,10G文件其实只移动了相对来说很小的inode表

20.不同磁盘的文件管理系统不同,所以文件再磁盘间转移非常耗时,因为整个都移动了,10G文件就移动10G文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值