簡體   English   中英

為什么在 close(1), open(“/dev/stdout”, O_WRONLY) 之前使用 dup(1) 會導致“沒有這樣的文件”?

[英]Why using dup(1) before close(1), open(“/dev/stdout”, O_WRONLY) results in “No such file”?

問題同題,操作系統為linux。 我試過幾個例子。

dup(1);
close(1);
int fd = open("/dev/stdout", O_WRONLY);

這導致了“/dev/stdout 沒有這樣的文件”錯誤。

我認為文件描述符只是指向struct file的指針數組的索引,如果沒有 fd 引用該struct file ,則 close() 將清除資源。 如果我使用 dup(1),它不應該創建一個指向 fd 1 指向的 fd 3,這樣 close(1) 就不會清除 /dev/stdout 嗎?

然后我嘗試了

int tmp = dup(1);
close(1);
dup(tmp, 1);
int fd = open("/dev/stdout", O_WRONLY);

這奏效了。

我想我錯過了一些核心概念。 任何幫助表示贊賞,謝謝。

您關閉了標准輸出,然后嘗試打開它。 但是你已經關閉了它,所以沒有什么可以打開的。 如果你沒有標准輸出,因為你已經關閉了它,那么/dev/stdout就不存在了。

我很好奇你期望這會返回什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM