【发布时间】:2018-03-18 18:51:24
【问题描述】:
我试图编写的程序应该定义一些常量(C 宏/常量)。于是我写了两个C程序:
-
hashgen:这会从输入文件生成常量。 -
loopy:这会执行带有一些文件名的hashgen。
这是我执行loopy的方式:
./loopy *.txt >> constants.h
下面是循环代码sn-p
int main(int argc, char** argv) {
char buf[256];
puts("#ifndef CONSTS_DEFINED\n#define CONSTS_DEFINED");
while(--argc > 0) {
sprintf(buf, "./hashgen %s", argv[argc]);
system(buf);
}
puts("#endif");
return 0;
}
执行上述脚本后,#ifndef .... 行丢失,而#endif 行存在。为什么孩子会覆盖父母的输出?
我同意有更好的方法来解决这个问题,但当时需要这样做。现在我想知道为什么会这样。 :)
【问题讨论】:
-
我无法确认这种行为,我创建了一个虚拟的
hashgen脚本 (echo $@),其输出与参数相同,我可以看到所有内容。顺便说一句,最后一个puts缺少一个分号。 -
上面真的是你运行的代码吗?最后一个 puts 后面缺少一个分号。
-
或许你也可以给我们看看
hashgen的代码 -
伙计们,问题是关于代码的行为。我没有粘贴文件,因为它很大。实际程序正在运行。屏幕上的输出验证了这两个程序的正确行为。我们缺少与 bash 如何处理此重定向相关的内容
-
所以你说没有重定向你会看到所有的行?只有在执行附加重定向
>>时它们才不会出现?我测试了这两种情况,两种情况的行为相同。
标签: c bash process output-redirect