Unix环境高级编程学习笔记(三)
文件 描述符
每打开一个文件或者创建一个文件,就返回一个文件描述符。
描述符0 对应 标准输入
描述符1 对应 标准输出
描述符2 对应 标准出错
文件描述符的范围是0~OPEN_MAX
OPEN 函数
#include<fcnt1.h> int open(const char *pathname, int oflag, mode_t mode) 成功返回描述符,错误返回-1
open返回的文件描述符一定是最小未用的描述符数值。(例子:关闭标准输出,在打开一个文件,则文件一定会在标准输出打开)
creat函数
#include《fcnt1.h》 int creat(const char *pathname, mode_t mode); 成功返回描述符,出错返回-1
此函数等效于
open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
而且open 函数优于creat 函数。
close函数
关闭一个已经打开的文件
int close (int fileds)
lseek函数
修改一个文件的偏移量。
#include<unist.d> off_t lseek(int fileds, off_t offset, int whence) 成功返回新偏移量,出错返回-1
offset的解释与whence有关,
一个标准输入复制到标准输出的例子:
1 #include"apue.h" 2 3 #defien BUFFSIZE 4096 4 5 int main(void) 6 { 7 int n; 8 char buf[BUFFSIZE]; 9 10 while((n = read(STDIN_FILENO, buf,BUFFSIZE)) > 0) 11 if (write(STDOUT_FILENO, buf, n) != n) 12 err_sys("write error"); 13 14 if (n < 0) 15 err_sys("read error"); 16 exit(0); 17 }
文件共享
不同进程间共享打开的文件。
文件共享的原理:每个进程在进程表中有一个标识符空间,里面存储了对应这个打开进程的文件表的指针。文件表中含有:文件状态标识,文件偏移量和V节点指针。V节点指针又会指向一个V节点表。
然而每个文件的V节点表是独一无二的。两个进程同时指向一个V节点表时,这样就完成了文件共享。