3 回答

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
正確的方法是替換文件描述符STDIN_FILENO,STDOUT_FILENO并STDERR_FILENO使用打開的文件dup2()。然后,您還應(yīng)該在子進(jìn)程中關(guān)閉原始文件:
else if (pid == 0)
{
dup2(fileno(someopenfile), STDIN_FILENO);
dup2(fileno(someotherfile), STDOUT_FILENO);
dup2(fileno(somethirdopenfile), STDERR_FILENO);
fclose(someopenfile);
fclose(someotheropenfile);
fclose(somethirdopenfile);
execvp(args[0], args);
// handle error ...
}

TA貢獻(xiàn)1831條經(jīng)驗 獲得超9個贊
看一下freopen功能。
我必須做類似的事情,stdout并編寫了兩個對我有用的函數(shù):
static int fd;
static fpos_t pos;
void switchStdout(const char *newStream)
{
fflush(stdout);
fgetpos(stdout, &pos);
fd = dup(fileno(stdout));
freopen(newStream, "w", stdout);
}
void revertStdout()
{
fflush(stdout);
dup2(fd, fileno(stdout));
close(fd);
clearerr(stdout);
fsetpos(stdout, &pos);
}

TA貢獻(xiàn)1804條經(jīng)驗 獲得超2個贊
您可以在stdin,stdout,stderr處于終端狀態(tài)時使用此命令
//change stdin,stdout,stderr
freopen("new_stdin","r",stdin);
freopen("new_stdout","r",stdout);
freopen("new_stderr","r",stderr);
//----do something;
//reset stdin,stdout,stderr
freopen("/dev/tty","r",stdin);
freopen("/dev/tty","r",stdout);
freopen("/dev/tty","r",stderr);
添加回答
舉報