#include<stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
        FILE *fp=fopen("/linux/uc/day02","r");
        if(fp==NULL)
        {
                printf("errno=%d\n",errno);
                printf("%d:%s",errno,strerror(errno));
                perror("ff");
        }
        return 0;
}
输出的结果很奇怪,先输出perror(“ff”)然后在输出 printf(“%d:%s”,errno,strerror(errno));为什么次序颠倒了呢?

解决方案
20
perror是无缓冲:无缓冲指的是标准的IO库不对字符进行缓冲存储
printf是行缓冲: 在这种情况下,标准的IO在输入和输出中遇到换行符执行IO操作;注意,当流涉及终端时,都使用行缓冲.
printf是行缓冲: 在这种情况下,标准的IO在输入和输出中遇到换行符执行IO操作;注意,当流涉及终端时,都使用行缓冲.
5
在每个最后不带\n的printf后面加fflush(stdout);
5
补充一点,perror 是打到 stderr 上的,不是 stdout 。它们会有独立的缓冲。