分叉过程出现问题,并使用execve调用bc

时间:2019-06-27 17:52:26

标签: c linux fork bc execve

我的程序旨在派生一个进程,在父级文件中逐行读取文件,并将这些行向下推到要传递给bc的管道上,这使用execve进行调用。

我正在使用的文件是仅包含5 + 10的文本文件。

父进程将这样读取它们:

while(fgets(newWord, sizeof newWord, coolFile) != NULL)
{
    write(stdin_pipe_fds[1], newWord, (strlen(newWord)+1));
}

孩子这样叫卑诗省:

execve("/usr/bin/bc", argv, NULL);

运行程序会显示以下错误消息:

 scg3q@system64:~/CS/project4$ (standard_in) 1: syntax error
 (standard_in) 1: illegal character: ^@
 (standard_in) 1: syntax error

当我尝试执行BC时会发生这种情况。有什么想法吗?

编辑:确保不将空终止符通过管道传递给bc来修复一个错误消息(非法字符),但保留其他两个错误消息。希望有人对这个问题有所了解!

2 个答案:

答案 0 :(得分:2)

不要将1加到strlen(newWord)。这导致您将空终止符写入管道,但是bc期望其输入中不包含空字节。

write(stdin_pipe_fds[1], newWord, (strlen(newWord)));

要解决其他语法错误,请确保newWord以换行符结尾,因为bc要求其输入为完整行。

答案 1 :(得分:0)

  

运行程序会显示以下错误消息:

scg3q@system64:~/CS/project4$ (standard_in) 1: syntax error
(standard_in) 1: illegal character: ^@
(standard_in) 1: syntax error

这些消息来自bc。他们抱怨说,由于非法字符^ @,您正在馈送到其标准输入的数据在语法上是不正确的,这是您错误地小心地向下发送流的空终止符。那不是您阅读的输入的一部分,也不应将其发送到bc