#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
printf("%d\t", 1);
write(1, "Acorn\n", 6);
printf("%d\t", 2);
write(1, "Book\n", 5);
return 0;
}
我想得到以下结果。
1 Acorn
2 Book
但以上代码的结果如下。
Acorn
Book
1 2
我无法解决这个问题。我对此很认真。
如何制作首先打印结果的代码呢?
答案 0 :(得分:2)
stdio
已缓冲。您需要在每次调用write(1,
之前致电fflush(3) ...(因为它是syscall),或者以printf
结束每个\n
格式字符串(因为 stdout 通常是行缓冲)。
顺便说一句,您可以使用snprintf(3)填充字符串缓冲区,然后再填充write(2)它。另见fdopen(3)&amp; dprintf(3)&amp; setvbuf(3)&amp; asprintf(3) ......
答案 1 :(得分:1)
printf
的输出卡在输出缓冲区中。为了与write
互操作,您需要刷新:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
printf("%d\t", 1);
fflush(stdout);
write(1, "Acorn\n", 6);
printf("%d\t", 2);
fflush(stdout);
write(1, "Book\n", 5);
return 0;
}