2017-01-02 49 views
1

我測試了這一點:將stdout重定向到文件描述符似乎不工作,爲什麼?

#include<unistd.h> 
#include<fcntl.h> 
int main() 
{ 
    int fd=open("./testdup.txt",O_CREAT|O_RDWR,0666); 
    dup2(STDOUT_FILENO,fd); 
    write(STDOUT_FILENO,"mymy\n",5); 
    close(fd); 
    return 0; 
} 

編譯並運行它,它劇照打印

mymy 

並非如我所料:寫操作應該寫爲「testdup.txt」文件。 爲什麼它不起作用?

+2

你爲什麼不檢查任何錯誤條件? –

+2

如果'fd'已經在使用,那麼'dup2(x,fd)'首先關閉fd,然後使fd成爲x的一個副本。這不是你想要的。 –

+2

交換dup2中的參數:dup2(fd,STDOUT_FILENO); – TonyB

回答

2

@TobyB在這裏是正確的。此代碼適用於我:

#include <unistd.h> 
#include <fcntl.h> 

int main(void) 
{ 
    int fd = open("./testdup.txt", O_CREAT | O_RDWR, 0666); 
    dup2(fd, STDOUT_FILENO); 
    write(STDOUT_FILENO, "mymy\n", 5); 
    close(fd); 

    return 0; 
} 

您的程序中參數到dup2的順序不正確。

相關問題