Cygwin64位
编译命令:
gcc hello.c -o hello -ansi -pedantic-errors
运行命令
./hello
的hello.c
#include<stdio.h>
int main() {
/*setbuf(stdout, 0); I KNOW THIS WILL WORK IF ADDED, it is a solution, but I want to know why line break itself is not working*/
printf("hello world!\n");
printf("hello world again!\r\n");
/*fflush(stdout); without fflush, the above strings are not showing*/
while(1)
{
}
}
问题:
我不想在每个printf后让fflush让终端及时显示字符串,那怎么样?
答案:setbuf(stdout,0);
为什么“\ n”或“\ r \ n”在我的情况下不起作用,考虑到很多帖子指出换行符会解决问题?
cygwin的终端是否与普通的Linux终端不同?既然我没有安装linux,那么有人给我测试吗?
或者让我问一个更一般的问题:在哪种终端上,句子“新线会强制冲洗”是真的吗?
由于
答案 0 :(得分:2)
似乎在Cygwin中,stdout
未被识别为终端(但作为管道),因此默认情况下它不是行缓冲的。
基于this answer,也许与Cygwin DLL链接会有所帮助。
答案 1 :(得分:1)
我对cgywin一无所知。但是我在这里做了一个测试。
我尝试下面的代码,并通过以下方式编译:gcc -std = c90 filename.c
没有fflush它在循环之前打印所有单词,所以我认为换行符刷新缓冲区!它只是工作!
我使用SUSE gcc。
#include<stdio.h>
int main() {
/*setbuf(stdout, 0); I KNOW THIS WILL WORK IF ADDED, it is a solution, but I want to know why line break itself is not working*/
printf("hello world!\n"); /*without fflush, not shown*/
printf("hello world again!\r\n"); /*without fflush, not shown*/
/* fflush(stdout);*/
while(1)
{
}
}
答案 2 :(得分:1)
该程序适用于32位Cygwin。具体来说,当我编译并执行该程序时:
#include<stdio.h>
int main() {
/*setbuf(stdout, 0); I KNOW THIS WILL WORK IF ADDED, it is a solution, but I want to know why line break itself is not working*/
printf("hello world!\n");
printf("hello world again!\r\n");
/*fflush(stdout); without fflush, the above strings are not showing*/
while(1)
{
}
}
它产生这个输出:
hello world!
hello world again!
然后挂起,直到我用 Ctrl-C 杀死它。
我得到了在Windows控制台,mintty和xterm下从bash调用程序的相同行为(我怀疑终端会有什么不同)。
我在64位Windows 7下使用32位Cygwin。你说你使用的是64位Cygwin,just announced a few days ago;我还没有尝试过。
我怀疑64位与32位Cygwin存在问题。我建议你发帖到Cygwin mailing list。
这是您的程序的清理版本,应该会出现同样的问题(请验证评论是否正确):
#include <stdio.h>
int main(void) {
/* Adding setbuf(stdout, 0) here makes the output appear */
printf("hello world!\n");
/* Adding fflush(stdout) here makes the output appear */
while(1) {
/* nothing */
}
}
答案 3 :(得分:0)
我刚刚遇到这个问题。我有一些代码我已经工作了一段时间,不得不在我的电脑上重新安装Cygwin。我这次安装了64位版本,以前是x86。
构建我的代码,在bash shell中运行它,没有输出。
我没有意识到我的bin文件夹中仍存在来自之前32位cygwin的Cygwin1.dll。我重命名了这个并运行了我的程序,输出工作正常。
您可能遇到了其他问题,但如果您使用bin其他文件夹中有不同的dll版本,则可能会导致此问题。