我想了解什麼是在調用fork()及其對爭用的可能影響後重覆文件描述符。相同的文件描述符後fork()
在 「Linux的編程接口」 24.2.1(P517):
當執行fork()的,孩子接收所有的 父母的文件描述符的副本。這些副本以dup()的方式 製作,這意味着父對象和子對象中的對應描述符引用相同的打開文件描述。
當我運行相同的代碼:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/wait.h>
int main(void) {
char* fl = "/tmp/test_fd";
int fd;
fd = open(fl, O_CREAT|O_TRUNC|O_WRONLY, 0666);
if(!fork()) {
printf("cfd=%d\n", fd);
_exit(0);
} else {
int status;
printf("ffd=%d\n", fd);
wait(&status);
close(fd);
unlink(fl);
}
}
我得到相同的文件描述符(多少?)兩個過程:FFD = 3和CFD = 3。但是,使用dup()運行此代碼時:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(void) {
char* fl = "/tmp/test_fd";
int cfd, ffd;
ffd = open(fl, O_CREAT|O_TRUNC|O_WRONLY, 0666);
cfd = dup(ffd);
printf("ffd=%d\n", ffd);
printf("cfd=%d\n", cfd);
close(ffd);
unlink(fl);
}
我得到不同的文件描述符:ffd = 3和cfd = 4。
然後,我有以下問題:
- 什麼意思fork()的創建父的文件描述符的副本?
- 當兩個進程(父和子)在同一個文件描述符上同時執行像fstat()這樣的操作時,是否存在爭用?
- 那麼兩個進程同時執行fstat()和兩個不同的文件描述符指向同一個文件呢?
[this](http://stackoverflow.com/a/11734354/4178025)相關的問題可能有幫助 – Diego