Unix学习的持续进阶之旅(三)

前言:小洋人终于恢复了,好似鬼门关逛了一遭,都开始思考人生了,目前已恢复。

------什么是I/O重定向?

使用open函数重复打开同一个文件,实际上是把文件表中的文件描述符复制一份,形成一个新的文件表项。文件表项是独立的,其中保存着每个文件的读写位置,但都指向同一个V节点指针,也就是系统内核中只会有一个V节点。

------何为打开文件?

应用程序要求内核打开某个文件,来访问一个I/O设备,内核会返回一个非负整数(即描述符)给应用程序,应用程序只记住这个描述符,后续所有的操作都以描述符来标识文件。

------文件的操作函数有哪些?

往文件写数据:write函数

从文件读数据:read函数

------读写二进制与读写文本文件的区别?

上述的read和write函数读写文件都是面向二进制字节流的I/O操作,文本文件打开后观看直观。如果用上述两个函数,用文本方式保存数据,就需要做点额外的工作:先格式为字符串,存入后,再解析为二进制数据放到内存中。

------文件读写位置的特点?

文件读写位置通常是一个非负的整数,用off_t类型表示(32为系统上为long int,64位系统为long long int),保存在文件表项中,每个文件是读写位置是独立的。初始化值为0。

------什么是文件的随机访问?

注意这个随机不是未知的随机数,而是人为的设置从某个位置开始读写。使用lseek函数可以设置,比如相对文件头或文件尾货当前位置偏移多少,函数成功返回调整后的文件读写位置。

------系统I/O和标准I/O?

系统I/O:通过open\read\write\close等系统调用实现文件I/O。

标准I/O:通过fopen\fread\fwrite\fclose等标准库函数实现文件I/O。

标准I/O也是通过系统I/O进行工作的,但因为标准库中做了缓冲区优化,标准I/O执行起来会比系统I/O快一些。

------复制文件描述符?

通过复制文件描述符,操作的是同一个文件描述符,其中的读写位置也是公用的。用于复制文件描述符的函数:dup和dup2

------文件同步与文件控制?

文件同步:将于文件有关的脏缓冲区中的数据和元数据回写到磁盘上。函数fsync、fdatasync、sunc。

文件控制:把对文件操作的很多功能集中到一个函数中,不同的功能参数不同,函数是fcntl。函数功能例如复制文件描述符、获取/设置文件描述符标志、获取/追加文件状态标志。

------文件锁?

两个进程同时向一个文件的某个特定区域写入数据时,容易产生混乱;一个进程写,一个进程读也会产生问题;两个进程同时读不会有问题。

写锁:是独占锁,只有一个进程可以加写锁成功,其他进程阻塞,等待写锁解除。

读锁:是共享锁,一个文件的特定区域可以同时加多把读锁。

使用fcntl函数可以加锁。

------文件锁的内核结构?

在V节点中有锁表指针,其指向锁节点,其中信息包括锁类型、锁区起点、锁区大小、加锁进程、下一个锁节点。

------文件元数据有哪些?

文件元数据存放在该文件的i节点中。可以用函数获取文件的元数据信息,函数有stat、fstat、lstat。其中lstat函数区别于其他两个的特点是不跟踪符号链接。(符号链接文件是指一个文件中存储的是其他文件的路径信息)文件的元数据有设备ID、i节点号、文件类型和权限、硬链接数、拥有者用户ID、拥有者组ID、特殊设备ID、总字节数、最后访问时间、最后修改时间和最后状态改变时间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值