首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dup2上的混淆

dup2上的混淆
EN

Stack Overflow用户
提问于 2016-03-14 19:41:31
回答 1查看 234关注 0票数 0

如果我有两个文件描述符,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的文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 20:13:28

为了理解这个问题,我尝试了下面这个片段:

代码语言:javascript
复制
#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);
}

代码片段给出了以下结果:

代码语言:javascript
复制
$ gcc -Wall -std=c99 test1.c -o test1
$ ./test1
$ cat test1.txt
678459

文件似乎首先包含"12345",然后被覆盖并包含"67845",最后,"9“被追加。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35996610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档