输入:从I/O到主存
输出:从主存到I/O
Linux I/O设备都描述为文件,操作一个文件,需要几步:
打开文件,会返回一个>=0描述符,然后对该描述符进行读写操作
读取:从打开文件开始处,如果读取m个字节,从0开始读渠道m结束。如果提前遇到EOF(结束符),提前终结
写入:则是打开文件,从需要的位置k写入m,
关闭:释放打开的文件相应数据结构和内存资源,并把文件描述符放入到可用的描述符池中
文件:
文件类型:
普通文件:文本文件(ASCII)、二进制文件
目录:一组链接文件,链接集合。 文件跟名字相连接,目录最少2条目:.:当前目录 ..:上级目录
套接字(socket):与另一个进程跨网络通信的文件
目录结构,从根目录/开始 往下一层一层路径。路径分为绝对路径和相对路径
绝对路径:从根目录开始到该文件目录
相对路径:上级../或者上上级../../目录到该文件目录
打开文件:open 返回文件描述符,赋予文件本进程对他权限(读、写、执行)和其他进程对他的权限
关闭文件:close
读和写文件:read write,有时候读和写的字节比应用程序少,可能是因为:读到EOF 、网络套接字、从终端读入
rio_read 无缓存区读
rio_wirte 无缓存区写
rio_readlineb 带缓冲区读行
rio_readnb 带缓冲区读二进制和文本文件
这几个函数比起read write更加健壮
state和fstate函数用来描述一个文件的信息,比如能判断文件是一个什么类型(普通文件、目录、套接字)
opendir 开大目录
readdir读取目录
closedir关闭目录
共享文件包括:描述符表 一个进程一个描述符表;文件表(所有进程共享),一个描述符对应一个描述符,父子进程共享一个文件表,描述符有一个引用数,引用数为0的时候,才可以清除;v-node表(所有进程共享):文件表指向state表,标示文件类型等
dup2 重定向 把一个描述符重定向到另一个文件表,引用+1,指向一个文件表,修改共同的文件,删除的时候,引用为0才可以