重定向问题

ddring 2004-12-31 11:41:08
请问,我需要把STDOUT重定向到一段内存中或者一个char 数组里面,改怎么做?
(就是希望能把printf的结果都输出到一个字符串里面)
我看到资料上的重定向,参数都是一个fd_set,怎么办?

或者有什么办法把一段内存转换成文件流?
...全文
165 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddring 2005-01-18
  • 打赏
  • 举报
回复
算了,没找到资料,我自己重写了一个PRINTF,把内容存在一段内存里,然后移动指针的位置,至少原来的那么多CGI都不用怎么改了,谢谢大家的回复!
lovefly_fanny 2005-01-11
  • 打赏
  • 举报
回复
mark~
shadowWind 2005-01-11
  • 打赏
  • 举报
回复
mark
peter9606 2004-12-31
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/18/18338.shtm
darkstar21cn 2004-12-31
  • 打赏
  • 举报
回复
int pipe_id[2];
if (pipe (pipe_id) == -1) {//打开一个通道
cerr << "Failed to open a pipe" << endl;
closedir (rdir);
continue;
}
char wfilename[256];
memset (wfilename, 0, sizeof wfilename);
strcpy (wfilename, wpath);
strcat (wfilename, pdirent->d_name);
strcat (wfilename, TEMP_SUFFIX);

char** vlc_argv;
pid_t pid = fork ();
if (pid == 0) { /*child*/
cout << "child running" << endl;
close (pipe_id[0]);//关闭输出通道

//set the output to the pipe
if (dup2 (pipe_id[1], 2) == -1) {//重定向输出
cout << "(Child Failed to duplicate) " << endl;
closedir (rdir);
close (pipe_id[1]);
_exit (-1);
}
close (pipe_id[1]);

//run a command
execvp ("ls", NULL);
}
}
else if (pid == -1) {//error
cerr << "Failed to creat a child process" << endl;
_exit (-1);
}
else {//parent
cout << "parent running" << endl;
string buff;
//wait for the child run
close (pipe_id[1]);

//get the chlid's output
char ct[256];
memset (ct, 0, 256);

//wait for output "EOF"
int len = 0;
while (1) {
len = read (pipe_id[0], ct , 256);//在这读通道,就是ls的输出
if (len > 0) {
//do with the output
cout << "(Pipe: " << ct << ')' << endl;
ct[len] = 0;
buff += ct;
if (buff.find ("EOF") != string::npos) {
sleep (WAIT_FOR_TERMINATE);
kill (pid, SIGTERM);
int term;
waitpid (pid, &term, 0);
delete[] vlc_argv;
remove (rfilename);
break;
}
}
else
break;
}

随便从以前的程序拷了一段,可能不全,运行不了,主要的东西都在这了。另外这是Linux下的,Windows的不知道怎么实现。
ddring 2004-12-31
  • 打赏
  • 举报
回复
有没有人帮忙啊,我在网上真的找不到资料
winstonch 2004-12-31
  • 打赏
  • 举报
回复
你可以研究一下文件的buffer,我记得可以设置这个buffer为自己的一块内存
ddring 2004-12-31
  • 打赏
  • 举报
回复
我就想知道能不能把一段内存虚拟成一个文件流,不知道各位能给一个明确的答复吗。要是不行的话我就不费事用fprintf得了
ddring 2004-12-31
  • 打赏
  • 举报
回复
文件操作就慢了,而且CGI是并发量很大的,我每个CGI都用一个临时文件的话,系统受不了
winstonch 2004-12-31
  • 打赏
  • 举报
回复
这样你可以重定向到一个文件中,用dup.
ddring 2004-12-31
  • 打赏
  • 举报
回复
是这样的,我是在CGI里面用,原来CGI里面都是用的printf,但是现在我需要把所有printf的信息收集起来做一个分析,然后再发给WEB SERVER,改用fprintf的话改动太大,每个printf语句都要改。
darkstar21cn给的方法是可行的,但是fork对CGI来说开销太大了,不知道有没有更好的办法啊?谢谢各位了!
mefit 2004-12-31
  • 打赏
  • 举报
回复
支持用sprintf
winstonch 2004-12-31
  • 打赏
  • 举报
回复
用sprintf不行吗?
char str[100];
//printf("%s", "abc");
sprintf(str; "%s", "abc");
kay_zlc 2004-12-31
  • 打赏
  • 举报
回复
redirection requires a fd,so can't redirect to char[] 'Cause lack of fd

just do it other ways,such as override <<

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧