当前位置: 技术问答>linux和unix
标准输出重定向问题
来源: 互联网 发布时间:2016-03-27
本文导语: 我想把在屏幕上输出的东西写入到一个文件。 程序: #include #include int main(int argc, char *argv[]) { int fd; FILE *fp; //to open a log file if((fp=fopen("stderr.log","w"))==NULL) ...
我想把在屏幕上输出的东西写入到一个文件。
程序:
#include
#include
int main(int argc, char *argv[])
{
int fd;
FILE *fp;
//to open a log file
if((fp=fopen("stderr.log","w"))==NULL)
{
printf("fopen error n");
exit(1);
}
system("ls");
fd=fileno(fp);
if(dup2(fd,STDOUT_FILENO)==-1){
exit(1);
}
fclose(fp);
}
程序执行结果是在屏幕上显示"ls"命令的结果,但文件中并没有写入结果,请问各位达人,我譔怎么办?谢谢!
程序:
#include
#include
int main(int argc, char *argv[])
{
int fd;
FILE *fp;
//to open a log file
if((fp=fopen("stderr.log","w"))==NULL)
{
printf("fopen error n");
exit(1);
}
system("ls");
fd=fileno(fp);
if(dup2(fd,STDOUT_FILENO)==-1){
exit(1);
}
fclose(fp);
}
程序执行结果是在屏幕上显示"ls"命令的结果,但文件中并没有写入结果,请问各位达人,我譔怎么办?谢谢!
|
dup()是可以解决你的问题的。你的system需要在dup之后运行才行,下面这个程序在centos5上编译运行通过。
#include
#include
#include
int main(int argc, char *argv[])
{
int fd;
FILE *fp;
//to open a log file
if((fp=fopen("stderr.log","w"))==NULL)
{
printf("fopen error n");
exit(1);
}
fd=fileno(fp);
if(dup2(fd,STDOUT_FILENO)==-1){
exit( 1 );
}
system("ls");
fclose(fp);
}
#include
#include
#include
int main(int argc, char *argv[])
{
int fd;
FILE *fp;
//to open a log file
if((fp=fopen("stderr.log","w"))==NULL)
{
printf("fopen error n");
exit(1);
}
fd=fileno(fp);
if(dup2(fd,STDOUT_FILENO)==-1){
exit( 1 );
}
system("ls");
fclose(fp);
}
|
用shell脚本重定向好了..那样觉得还简单些