前言:
我们知道linux 中fd=0 表示标准输入stdin,fd=1 表示标准输出stdout,fd=2 表示标准错误stderr。
当某一程序运行时,避免fd(0,1,2)被使用,通常需要写一段保护stdin & stdout & stderr 的代码。
保护stdin,stdout,stderr 的方法示例:
先利用for/while 循环,先把fd (0,1,2)分配出去,这样后面就不会再打开stdin/stdout/stderr. 举例如下:
void fd_workaround(start){
static int fd[3]={-1,-1,-1};
int i;
if(start)
{
for(i=0;i<3;i++)
{
fd[i]=open("/dev/null",O_RDWR);
if(fd[i]>2)
{
close(fd[i]);
fd[i]=-1;
break;
}
}
}else
{
for(i=0;i<3;i++)
{
if(fd[i]>0)
{
close(fd[i]);
fd[i]=-1;
}
}
}