gpt4 book ai didi

dup2 上的困惑

转载 作者:行者123 更新时间:2023-11-30 17:03:51 34 4
gpt4 key购买 nike

如果我有两个文件描述符 f1f2,并且我将它们打开到同一个文件:file.txt,会发生什么情况。根据我的理解,它们将指向不同的文件偏移量(除非我调用 dup2)。如果每个文件描述符中有不同的内容并且我调用了dup2,会发生什么?

例如,如果我要做这样的事情:f1f2 都是 file.txt 的文件描述符。两个文件描述符都使用标志 O_WRONLY|O_CREAT 打开,其中 f1f2 之前打开(如果重要的话)。

  1. 将 12345 写入 f1

  2. 将 678 写入 f2

  3. 调用dup2(f1, f2)

  4. 将 9 写入 f2

file.txt 现在有什么?我的猜测只是一个包含 123459 的文件。

最佳答案

只是为了理解我尝试过这个片段的问题:

#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”。

关于dup2 上的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35996610/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com