【发布时间】:2012-11-10 19:03:46
【问题描述】:
我正在尝试在我的 C 程序中执行其他程序。我的第一次尝试是使用 popen。当我尝试从 pipe 读取时,我只得到 1 个字节的回复,而 buf 中什么也没有。我不确定这背后的原因。
打开示例:
#include<stdio.h>
#include<unistd.h>
int main(int argc, char* argv[])
{
FILE* pipe;
if ((pipe=(FILE*)popen("./test.php","r"))==NULL)
printf("this is not working\n");
char buf[1024] = {'\0'};
int fd=fileno(pipe);
int bytes = read(fd, buf, 1024);
printf("bytes read %d\n", bytes);
printf("The program: %s\n", buf);
if(pclose(pipe)<0)
printf("not working\n");
return 0;
}
php 示例
#!/usr/bin/php
<?php
echo "THIS IS A TEST THAT WORKED\n";
?>
输出:
bytes read 1
The program:
ls 的输出:
ls -l test.php
-rwxr-xr-x+ 1 tpar44 user 62 Nov 10 14:42 test.php
对此的任何帮助将不胜感激! 谢谢!
【问题讨论】:
-
还是没发现问题,请问可以添加输出吗?
-
@mux 我也没有,这就是为什么我现在如此困惑
-
这可能看起来很傻,但是您是否重新编译了代码:)?
-
@mux haha 是的,我什至从以前的编译中删除了旧的可执行文件,以防万一...我还将上面的代码复制并粘贴到一个新文件中,以防万一都不起作用
-
@mux 即使 popen 创建了一个管道,来自 php 脚本的输出注定要用于 stdout 是否重要?该输出是否自动重定向到管道? (我认为这是真的,但现在我不太确定)