Joh*_*0te 3 c c++ unix file-descriptor
虽然我已经合理地习惯了UNIX并且已经对它进行了很长时间的编程,但我并不习惯于文件操作.
我知道0/1/2文件描述符是标准输入,输出和错误.我知道无论何时进程打开一个文件,都会给它一个具有最小值但尚未使用的描述符 - 我理解使用dup/dup2的一些事情.
我对进程之间的文件描述符感到困惑.每个进程是否有自己的0/1/2描述符用于输入/输出/错误,还是在所有进程之间共享的3个描述符?为什么你可以在3个不同的shell中运行3个程序,如果它们被共享,它们都只得到它们的程序输出?
如果两个程序在启动后打开myfile.txt,它们都会使用文件描述符#3,还是第二个程序会使用#4从3开始?
我知道我在几个方面问了同样的问题,但我只是想清楚一点.越详细越好:)编程时我从来没有遇到过这些问题,但我正在阅读一本UNIX书来了解更多,我突然意识到这让我很困惑,我从来没有在细节之前.
每个文件描述符都是进程的本地描述符.但是,某些文件描述符可以引用同一文件 - 例如,如果使用fork()
它创建子进程,则会共享父进程打开的文件.它将拥有自己的一组文件描述符,最初与父代的文件描述符相同,但它们可以通过关闭/复制等进行更改.
如果两个程序打开同一个文件,通常它们会获得单独的文件描述符,指向不同的内部结构.但是,使用某些技术(fork
,FD传递等),您可以让不同进程中的文件描述符指向同一个内部实体.但一般情况并非如此.
回答你的问题,这两个程序都有FD#3用于新打开的文件.
归档时间: |
|
查看次数: |
1362 次 |
最近记录: |