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节点表时,这样就完成了文件共享。

 

原文地址:https://www.cnblogs.com/yestreen/p/3052600.html