linux dup2()函数怎么不能重定向标准输出(STDOUT)到文件?
发布网友
发布时间:2022-04-12 19:20
我来回答
共3个回答
懂视网
时间:2022-04-12 23:41
update 2014.04.10
今天有了“更深”的认识吧
int dup2(int filedes1,int filedes2);
是把filedes2指向的流关闭,而重定向到filedes1指向的流,此时filedes1和filedes2均指向同一个流。
就这么简单。。。。
热心网友
时间:2022-04-12 20:49
我没怎么改,编译运行好像正常?
#include<stdio.h>
#include<unistd.h>
int main(int argc,char **argv)
{
FILE * fd;
fd = fopen("log.txt","a+");
p2(fileno(fd), 1);
p2(fileno(fd), 2);
int i=0;
for(i=0;i<5;i++)
{
printf("output to STDOUT!\n");
fprintf(stderr,"output to STDERR!\n");
sleep(2);
}
return 0;
}
结果:
[ksl@myhost ~]$ cat log.txt
output to STDERR!
output to STDERR!
output to STDERR!
output to STDERR!
output to STDERR!
output to STDOUT!
output to STDOUT!
output to STDOUT!
output to STDOUT!
output to STDOUT!
先输出了stderr的原因是,stdout在sleep之后不会立刻输出,而是等到进程要关闭的时候,所以之前每次都会先输出STDERR,等到进程结束的时候才把stdout的内容给刷出来。我这边显示是这样的。
热心网友
时间:2022-04-12 22:07
我没怎么改,编译运行好像正常?
#include<stdio.h>
#include<unistd.h>
int
main(int
argc,char
**argv)
{
FILE
*
fd;
fd
=
fopen("log.txt","a+");
p2
(fileno(fd),
1);
p2(fileno(fd),
2);
int
i=0;
for(i=0;i<5;i++)
{
printf("output
to
STDOUT!\n");
fprintf(stderr,"output
to
STDERR!\n");
sleep(2);
}
return
0;
}
结果:
[ksl@myhost
~]$
cat
log.txt
output
to
STDERR!
output
to
STDERR!
output
to
STDERR!
output
to
STDERR!
output
to
STDERR!
output
to
STDOUT!
output
to
STDOUT!
output
to
STDOUT!
output
to
STDOUT!
output
to
STDOUT!
先输出了stderr的原因是,stdout在sleep之后不会立刻输出,而是等到进程要关闭的时候,所以之前每次都会先输出STDERR,等到进程结束的时候才把stdout的内容给刷出来。我这边显示是这样的。