文件IO
函数lseek:
每个打开文件都有一个与其相关联的“当前文件偏移量”,用来度量从文件开始处计算的字节数。除非指定O_APPEND选项,否则该偏移量被置为0。如果文件描述符指向的是一个管道、FIFO或网络套接字,则lseek返回-1,并将errno设置为ESPIPE。偏移量记录在内核中,并不引起任何I/O操作,该偏移量将用于下一个读或写操作。
read、write
从标准流读入 ,再输出到标准流。类似与大多数输出语句的底层实现基础,应该就是这样实现的吧,调用标准读入read,然后在标准流输出write到屏幕上。
文件共享:
内核使用三种数据结构表示打开文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程产生的影响。
(1)每个进程在进程表中都有一个记录项-》其中包含一张打开文件描述符表:文件描述符标志 & 指向一个文件表象的指针;
(2)内核为所有打开文件维持一张文件表,每个文件表包含:文件状态标志(读、写) & 当前文件偏移量(每个进程都有自己对该文件的偏移量) & 指向该文件V节点的表项的指针
(3)每个打开文件都有一个v(v-node)结构。
函数dup和dup2:
连个函数都用来复制一个现有的文件描述符。
dup返回的新文件描述符一定是当前空用文件描述符中的最小数值。
dup2
函数fcnt1:
可以改变已经打开文件的属性。获取一些标志
函数ioctl:
ioctl函数一直是I/O操作的杂物箱。
/dev/fd:
较新的系统都提供名为/dev/fd的目录。其项目名为0 1 2等的文件。