Geist字体终极指南:为你的数字项目注入现代设计灵魂
2026/6/2 10:11:39
标准IO是C函数库的常见IO操作接口(对操作系统提供的系统调用进行封装,进一步降低与硬件的耦合),提供了缓冲机制,减少触发系统调用次数,实现了更高的效率
- fopen 函数是由封装 open 函数实现 - fclose 函数是由封装 close 函数实现 - fread 函数是由封装 read 函数实现 - fwrite 函数是由封装 write 函数实现 - fseek 函数是由封装 lseek 函数实现vi /usr/include/stdio.hvi /usr/include/bits/types/struct_FILE.h| 名称 | 文件描述符(值) | 常量 | 流 | 缓冲类型 |
|---|---|---|---|---|
| 标准输入流 | 0 | STDIN_FILENO | stdin | 通常是行缓冲 |
| 标准输出流 | 1 | STDOUT_FILENO | stdout | 当连接到终端时,通常是行缓冲 |
| 标准错误流 | 2 | STDERR_FILENO | stderr | 默认是无缓冲,立即输出 |
#include<stdio.h>#include<unistd.h>intmain(intargc,constchar*argv[]){perror("aaaa");#if0while(1){sleep(1);}#endifreturn0;}printf("Enter name: "); // 可能不会立即显示scanf("%s", name); // 读取前会刷新 stdout#include<stdio.h>#include<unistd.h>intmain(intargc,char*argv[]){inti=0;#if0do{printf("a");i++;}while(i<100);#else//1024do{printf("a");i++;}while(i<1025);#endifsleep(10);return0;}#include<stdio.h>#include<unistd.h>intmain(intargc,char*argv[]){FILE*fd=fopen("a.txt","a+");fprintf(fd,"a");//读、写缓冲区大小printf("%d ",fd->_IO_buf_end-fd->_IO_buf_base);// 4096inti=0;do{fprintf(fd,"a");i++;}while(i<4098);//测试写指针偏移量printf("%d",fd->_IO_write_ptr-fd->_IO_write_base);// 3sleep(5);return0;}#include<stdio.h>#include<unistd.h>intmain(intargc,char*argv[]){printf("a");sleep(5);//a是行缓冲,原则是不输出的,这时关闭缓冲setbuf(stdout,NULL);//模式是无缓冲后,先把缓冲中的a刷了出来,b再立马输出printf("b");sleep(5);return0;}