1011 文件位置函数和缓冲区
写了十个字节文件指针已经偏移了再读的话已经是后面的十个字节了
判断文件大小
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
FILE *fp;
int count=0;
if(argc<2)
{
fprintf(stderr,"usage...\n");
exit(1);
}
fp=fopen(argv[1],"r");
if(fp==NULL)
{
perror("fopen()");
exit(1);
}
fseek(fp,0,SEEK_END);//移动到文件尾部
printf("%ld\n",ftell(fp));
}
//rewind 没有返回值 也不会出错
//void fseek(stream,0l,SEEK_SET);
//如果是long最好将数字常量化
//rewind 相当于上面一句的封装
空洞文件
比如下载文件 一开始是源文件的大小
初始化有很多0字符
fflush
int main()
{
printf("before");//其实这里第一句都不会打印
//直接卡在while
//因为刷新缓冲区是会当读到换行付号 读满一行才会刷新
//因此默认打印一行都要加上换行符
//所以可以加上这一行强制刷新 fflush(stdout) fflush(NULL);
while(1);
printf("agter");
exit(0);
}
问题 如果需要开辟一块动态内存
malloc 返回一个地址
判断如果空间不够了realloc
EXAMPLES
#define _GNU_SOURCE //没有宏值 需要加在makefile中 -D_GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
FILE *stream;
char *line = NULL;
size_t len = 0;
ssize_t nread;
if (argc != 2) {
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
exit(EXIT_FAILURE);
}