Andy Niu �����ĵ�

Andy Niu

Andy Niu Help  1.0.0.0
Unix环境高级编程

变量

 文件描述符FD
 

详细描述

变量说明

文件描述符FD
1、文件描述符是针对进程的,也就是说一个进程维护一组文件描述符FD,就是int值,各不相同,一般从3开始。
    因为按照惯例0,1,2分别是标准输入,标准输出,错误输出。
2、一个进程中的FD各不相同,每次打开一个文件(即使是同一个文件),产生的FD也不相同。
    代码:
    #include <stdio.h>
    #include <fcntl.h>
    int main(int argc, char* argv[])
    {
            int fd1 = open("./aaa.txt",O_RDONLY);
            int fd2 = open("./aaa.txt",O_RDONLY);
            printf("fd1[%d], fd2[%d]\n", fd1, fd2);
            
            getchar();
            return 0;
    }
    测试:
    [root@localhost FD]# g++ -o main main.cpp
    [root@localhost FD]# ./main
    fd1[3], fd2[4]
3、文件描述符是针对进程的,一个进程中FD不会重复,但是不同进程中的FD会出现重复。
4、每个进程包含一个FD列表,每个FD包含文件描述符标志和一个指向文件表的指针,文件表对应一个打开的文件。
    目前FD标志只有一个close-on-exec标志,取值0表示fork子进程,子进程exec的时候不关闭文件描述符,取值1关闭。
    系统默认是0
5、内核维护一个文件表的列表,对应于所有打开的文件。文件表包含文件状态标志,当前文件偏移量,指向文件v节点的指针。
    文件状态标志主要有读,写,添加,同步,阻塞等。
6、复制FD,使用dup方法。
    dup复制文件描述符,返回一个新的FD,新FD与老FD的FD标志和文件表指针相同,文件表指针指向同一个文件表,二者的FD标志可以再设置不同。
7、注意以下单词的区别:
    duplicate和replicate都是复制的意思,但是二者的侧重点不一样。
    du是double的意思,成双,复制一个一模一样的东西。
    re是redo的意思,重做,对于做过的事情重新做一遍。
    dump的原意是倾倒垃圾,在计算机中指把一个存储器中的内容转移到另一个存储器中。比如dump文件就是进程的内存镜像
    保存到文件中。在mysql中dump是转存,也就是备份数据。
Copyright (c) 2015~2016, Andy Niu @All rights reserved. By Andy Niu Edit.