[英]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.