今天尝试《UNIX环境高级编程》的例1-5,代码如下:
#include <sys/types.h>
#include <sys/wait.h>
#include "ourhdr.h"
int main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;
printf("%% "); /* print prompt (printf requires %% to print %) */
while (fgets(buf, MAXLINE, stdin) != NULL) {
buf[strlen(buf) - 1] = 0; /* replace newline with null */
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid == 0) {
execlp(buf, buf, NULL);
err_ret("couldn't execute: %s", buf);
exit(127);
}
/* parent */
if ((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
printf("%% ");
}
exit(0);
}
ourhdr.h头文件是附录2里面的内容,这个程序不能直接运行,读者想尝试的需要把附录2的内容包含进来一起编译
悲剧的是我把这一行敲成这样了:
gcc -v出来的版本是“gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)”
使用gcc 1-5.c ourhbr.c编译没有报任何错就通过了,但是执行程序怎么也打不到预期的结果:
纳闷了半天,最后突然看到这行语句右边没有值,果断赋值了就解决了:
粗细啊,对着巧都敲错了,不过也好,这样就发现gcc居然对这种不赋值的表达式居然不报错。不知道高版本如何
个人觉得这个不利于排错啊,尤其是我这样的马大哈啊