通过system()执行外部程序无法正常运行

时间:2009-10-23 09:56:58

标签: c++ linux system

我尝试通过在system()调用中调用该命令,从我的代码中调用一个程序(ncbi blast,对于那些需要知道的人)。

如果我直接在shell中执行字符串,它按预期工作,但如果我通过system()尝试相同的字符串,程序返回得更快,没有预期的结果。输出文件已创建,但文件大小为0.返回的错误代码也为0.我甚至尝试附加“> output.log 2> error.log”,但不会创建这些文件。

我想这与环境变量或路径有关...

输出文件名是通过-o命令行参数给出的,而不是输出重定向。

我读过一些关于popen命令可能更适合我的用例的内容,但我找不到它,哪个库来自哪个?

4 个答案:

答案 0 :(得分:1)

此类问题的最常见原因是~/.bashrc中的环境变量设置不正确。

您应该能够通过执行

来查看ncbi不满意的内容
$SHELL -c '<exact string you pass to system()>'

调试此问题的另一种常见方法是使用strace。执行:

strace -fo /tmp/strace.out ./myProgram

并查看/tmp/strace.out中的线索。

答案 1 :(得分:1)

您是否有任何理由不想forkexec?这是从另一个进程执行一个进程的常用习惯用法。

答案 2 :(得分:0)

popen在标准C库中 See the man page

答案 3 :(得分:0)

一些简单的问题:

  • 如何在shell中执行?
  • 如何在系统命令中执行?
  • 系统返回的值是什么?

您终端的精确复制和粘贴比英文说明更可取。