【发布时间】:2016-04-23 22:41:30
【问题描述】:
我有一个任务是在 Linux 中实现 tail 命令的基本实现,它运行良好,但是当我运行它时,它只是转到下一行并且什么都不做。代码如下:
int main(int argc, char *argv[])
{
int counter;
printf("program started");
if(argc == 1)
{
printf("hello1");
tailSTDIN();
}
else if(argc == 2)
{
printf("here");
tailFile(argv[1]);
printf("tailed");
}
else for(counter = 0; counter < argc; counter++)
{
printf("loop");
if(argv[argc] == "-")
{
printTitle("standard input");
tailSTDIN();
}
else
{
printTitle(argv[counter]);
tailFile(argv[counter]);
}
}
return 0;
}
好的,所以问题是它卡住了,它甚至没有到达第一个printf(),它说program started,它只是在等待一些东西。这与我给出的论点或论点无关。
如果您认为您需要包含其余函数的完整代码,我会将其放入,但问题是它永远无法调用它们。
【问题讨论】:
-
你是如何运行你的代码的。我的意思是命令和参数。
-
它没有卡住,您只是永远看不到您打印的内容,因为标准输出默认是行缓冲的,并且您没有在消息中包含任何换行符来触发行刷新。跨度>
-
将
\n添加到您的 printf 调用中(如果您进行输出重定向,则调用fflush(stdout);)。 -
使用调试器。或者至少用
"program started\n"替换"program started"以确保出现消息(stdout 可能被缓冲,换行强制刷新缓冲区)。 -
还要检查
if(argv[argc] == "-")- “对字符串常量地址的逻辑运算”