一、标准IO
1.fread/fwrite
size_t fwrite (const void *ptr,size_t size,size_t nmemb,FILE *stream);
功能:函数从指定的内存位置开始,将一块数据写入到指定的文件流中。
参数:
ptr:指向要写入文件的数据块的指针
size:要写入的每个数据项的大小(以字节为单位)
nmemb:x写几份
stream:被写入的文件
返回值:
成功:返回成功写入的数据项的数量
失败:返回一个小于 nmemb 的值
size_t fread (const void *ptr,size_t size,size_t nmemb,FILE *stream);
功能:函数从指定的文件流中读取数据块到内存中。
参数:
ptr:指向要写入文件的数据块的指针
size:要写入的每个数据项的大小(以字节为单位)
nmemb:被写几份
stream:被写入的文件
返回值:
成功:返回实际读取的数据项的数量
失败:在读取过程中,如果遇到文件末尾或发生错误,fread 将返回一个小于请求的数据项数量的值。
2.fseek/ftell
int fseek(FILE *stream, long offset, int whence);
功能:函数从指定的文件流中读取数据块到内存中。
参数:
stream:要操作的文件流
offset:表示相对于 whence 指定的位置的偏移量,以字节为单位。
whence:指定 offset 相对于什么位置进行偏移。
返回值:
成功:0
失败:-1(非零)
fseek(打开文件的地址,偏移量,SEEK_END/SEEK_CUR/SEEK_SET)
尾 当前位置 头
long ftell(FILE *stream);
功能:函数从指定的文件流中读取数据块到内存中。
参数:
stream:文件计算的大小
返回值:
成功:返回当前文件位置指针相对于文件开头的偏移量(以长整型 long 表示)。
失败:返回 -1L(即长整型值 -1)
3.缓冲区
#include<stdio.h>
#include<unistd.h>
int main(int argc, char const *argv[])
{
FILE *p=fopen("1.txt","w");
#if 0
fputs("hello\n",p);//在缓冲区里
while (1);
#endif
#if 1
for(int i=0;i<4096;i++)//缓冲区满则刷新
{
fputc('a',p);
}
sleep(3);
fputc('a',p);//
while(1);
#endif
#if 0
fputs("hello",p);
fflush(p);//刷新缓冲区
while(1);
#endif
return 0;
}
行缓冲,1k,terminal,主要用于人机交互stdout
缓存区满或者遇到\n刷新 1024
行缓存多是关于终端的一些操作
1.遇到\刷新
2.缓存区满刷新
3.程序结束刷新
4.fflush刷新 fflush(stdout); FlLE*fp stdin stdout stderr
全缓冲,4k,主要用于文件的读写
缓存区满刷新缓存区 4096
对普通文件进行标准I0操作,建立的缓存一般为全缓存
刷新条件:
1.缓存区满刷新
2.程序结束刷新
3.fflush来刷新 fflush(fp);
无缓冲,0k
主要用于出错处理信息的输出 stderr不对数据缓存直接刷新
printf();==>>stdoutfprintf(strerr,"fopen error %s",filename);