我的程序旨在派生一个进程,在父级文件中逐行读取文件,并将这些行向下推到要传递给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来修复一个错误消息(非法字符),但保留其他两个错误消息。希望有人对这个问题有所了解!
答案 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
。