如果我有两个文件描述符,f1和f2,并将它们打开到同一个文件:file.txt,会发生什么?据我理解,它们将指向不同的文件偏移量(除非我调用dup2)。如果每个文件描述符中有不同的内容,并且我调用了dup2,会发生什么?
例如,如果我要这样做:f1和f2都是file.txt的文件描述符。这两个文件描述符都是用标志O_WRONLY|O_CREAT打开的,f1在f2之前打开(以防有问题)。
f1f2dup2(f1, f2)f2file.txt现在会有什么?我猜只是一个有123459的文件。
发布于 2016-03-14 20:13:28
为了理解这个问题,我尝试了下面这个片段:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(){
int f1 = open ("test1.txt", O_WRONLY|O_CREAT, 0644);
int f2 = open ("test1.txt", O_WRONLY|O_CREAT, 0644);
write (f1, "12345", 5);
write (f2, "678", 3);
dup2 (f1, f2); // this closes f2
write (f2, "9", 1);
close (f1);
close (f2);
}代码片段给出了以下结果:
$ gcc -Wall -std=c99 test1.c -o test1
$ ./test1
$ cat test1.txt
678459文件似乎首先包含"12345",然后被覆盖并包含"67845",最后,"9“被追加。
https://stackoverflow.com/questions/35996610
复制相似问题