我尝试通过在system()调用中调用该命令,从我的代码中调用一个程序(ncbi blast,对于那些需要知道的人)。
如果我直接在shell中执行字符串,它按预期工作,但如果我通过system()尝试相同的字符串,程序返回得更快,没有预期的结果。输出文件已创建,但文件大小为0.返回的错误代码也为0.我甚至尝试附加“> output.log 2> error.log”,但不会创建这些文件。
我想这与环境变量或路径有关...
输出文件名是通过-o命令行参数给出的,而不是输出重定向。
我读过一些关于popen命令可能更适合我的用例的内容,但我找不到它,哪个库来自哪个?
答案 0 :(得分:1)
此类问题的最常见原因是~/.bashrc
中的环境变量设置不正确。
您应该能够通过执行
来查看ncbi
不满意的内容
$SHELL -c '<exact string you pass to system()>'
调试此问题的另一种常见方法是使用strace
。执行:
strace -fo /tmp/strace.out ./myProgram
并查看/tmp/strace.out
中的线索。
答案 1 :(得分:1)
您是否有任何理由不想fork
和exec
?这是从另一个进程执行一个进程的常用习惯用法。
答案 2 :(得分:0)
popen在标准C库中 See the man page
答案 3 :(得分:0)
一些简单的问题:
您终端的精确复制和粘贴比英文说明更可取。