#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 。它们会有独立的缓冲。