linux 下重定向的问题,定位了24小时没有结果

默默努力的小熊 2013-04-24 02:35:19
借风水宝地求牛人解答!
在linux 下安装apache,用C语言写cgi
在cgi中又调用了另外一个库,这个库的所有输出是用printf打印了,所以在cgi中必须截获这段打印,
然后根据这段打印解析生成数据结果再回复给客户端。
看了网上无数的帖子,尝试了以下的方法均不能截获,求高手帮忙!!!
1、cgi中直接将stdout重定向至/dev/console或者/dev/tty,未看到输出
2、cgi中创建管道,先把标准输出重定向到写管道,等库代码执行完之后再执行读管道,未获得打印。
3、方法同2,只不过再fork一个子进程做步骤2
4、用freopen重定向标准输出到/dev/console或者/dev/tty,未看到输出
5、写一个程序调用库中函数,然后用popen调用该程序,用fgets读结果,为空
以上所有方法直接在命令行下执行cgi均可以正确执行截获打印并输出结果。
求高手解答如何在C语言CGI中将标准输出重定向到我们期望的缓冲或者管道中?
...全文
398 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
找到问题了,哈哈 还有一个问题是cgi系统权限的问题
	int fd_copy, new_fd;

	if ((fd_copy = dup(fd)) < 0) {
		log_sys_error("dup", name);
		return 0;
	}

	if (fclose(stream))
		log_sys_error("fclose", name);

	if ((new_fd = dup2(fd_copy, fd)) < 0)
		log_sys_error("dup2", name);
	else if (new_fd != fd)
		log_error("dup2(%d, %d) returned %d", fd_copy, fd, new_fd);

	if (close(fd_copy) < 0)
		log_sys_error("close", name);

	if (!(*new_stream = fdopen(fd, mode))) {
		log_sys_error("fdopen", name);
		return 0;
	}

	return 1;

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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