dup,dup2函數
這兩個函數的功能是輸出的重定向
定義這兩個函數的頭文件是unistd.h,有興趣的可以自己看看這個頭文件包含的內容
要提的是這個頭文件同時定義了下面三個常量
定義這兩個函數的頭文件是unistd.h,有興趣的可以自己看看這個頭文件包含的內容
要提的是這個頭文件同時定義了下面三個常量
STDERR_FILENO
= 2 標準錯誤輸出STDIN_FILENO
= 0 標準輸入STDOUT_FILENO
= 1 標準輸出
兄弟們學習網絡編程用0,1,2這些參數的時候也得知道代表的意思
要說這兩個函數的意思,還是看一段具體的代碼
int fd, fd2;
mode_t fd_mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH;
void redir_stdout(const char *filename)
{
fd2=dup(STDOUT_FILENO);
fd = open(filename, O_WRONLY|O_CREAT, fd_mode); //打開文件操作
dup2(fd, STDOUT_FILENO); //把輸出重定向到fd標識的文件
close(fd);
}
mode_t fd_mode = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH;
void redir_stdout(const char *filename)
{
fd2=dup(STDOUT_FILENO);
fd = open(filename, O_WRONLY|O_CREAT, fd_mode); //打開文件操作
dup2(fd, STDOUT_FILENO); //把輸出重定向到fd標識的文件
close(fd);
}
fd2=dup(STDOUT_FILENO);說明fd2表示了標準輸出
如果我們想把剛剛定向到fd的輸出,再定向回標準輸出,我們可以用下面的代碼實現:
void resume_stdout() //恢復輸出,把標準輸出定向到fd2,fd2代表的是標準輸出
{
dup2(fd2, STDOUT_FILENO);
close(fd2);
}
{
dup2(fd2, STDOUT_FILENO);
close(fd2);
}