Day1_IO进程线程

1>使用fgets完成统计文件行号

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		FILE *fp = NULL;
    10		//以只读的方式打开文件
    11		if((fp = fopen("./01fopen.c","r")) == NULL){
    12			perror("fopen error");
    13			return -1;
    14		}
    15		//定义容器和计数器
    16		char str[128] = "";
    17		int count = 0;
    18		//str从fp指向的地址获取信息
    19		//当字符为\n时,计数器自增
    20		while(fgets(str,sizeof(str),fp) != NULL){
    21			if(str[strlen(str)-1] == '\n'){ 	//当遇到缓存区满或者'\n'时会刷新,加一个判断
    22				count++;
    23			}
    24		}
    25		//输出计数器的值
    26		printf("文件共%d行\n",count);
    27	
    28		//关闭文件
    29		fclose(fp);
    30	
    31	
    32		return 0;
    33	}
    34	
    35

2>使用fgets、fputs实现两个文件拷贝

    1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义两个文件指针
     9		FILE *fpsrc = NULL;
    10		FILE *fpdest = NULL;
    11		//只读方式打开源文件
    12		if((fpsrc = fopen("./01fopen.c","r")) == NULL){
    13			perror("fopensrc error");
    14			return -1;
    15		}
    16		//只写方式打开目标文件
    17		if((fpdest = fopen("./11test.c","w")) == NULL){
    18			perror("fopendest error");
    19			return -1;
    20		}
    21		//定义一个容器
    22		char str[128];
    23		//使str从源文件中获取内容
    24		//将str中内容放入目标文件
    25		while(NULL != fgets(str,sizeof(str),fpsrc)){
    26			fputs(str,fpdest);
    27		}
    28		//关闭文件指针
    29		fclose(fpsrc);
    30		fclose(fpdest);
    31		//只读方式打开目标文件
    32		if((fpdest = fopen("./11test.c","r")) == NULL){
    33			perror("fopendest error");
    34			return -1;
    35		}
    36		puts("copy success");
    37	
    38		return 0;
    39	}
    40	
    41

3>向文件中输出时间,并且是每一秒更新一次,按ctrl+c停止输出后,下次再运行./a.out会继续向文件中接着输出

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	#include 
     7	#include 
     8	int main(int argc, const char *argv[])
     9	{
    10	
    11		
    12		
    13		//定义一个容器,临时容器,行数
    14		char str[128] = " ";
    15		int temp = -1;
    16		int line = 0;
    17		
    18		//定义文件指针,以追加的方式打开
    19		FILE *fp = NULL;
    20		if((fp = fopen("./12test.txt","a+")) == NULL){
    21			perror("fopen error");
    22			return -1;
    23		}
    24		//当重新打开文件,计算行数,line自增
    25		while(fgets(str,sizeof(str),fp) != NULL){
    26			if(str[strlen(str)-1] == '\n'){
    27				line++;
    28			}
    29		}
    30	
    31		time_t T = 0;
    32		struct tm *t = NULL;
    33		//当时间不相等时,将容器内的值输入到文件
    34		while(1){
    35			
    36			//定义时间指针
    37			//获取当前的秒数
    38			T = time(NULL);
    39			
    40			//将秒转换为标准时间
    41			t = localtime(&T);
    42			
    43			//将标准时间放入输出
    44			if(temp != t->tm_sec){
    45				fprintf(fp,"%d:%4d-%02d-%02d %02d:%02d:%02d\n",++line,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
    46				temp = t->tm_sec;
    47				printf("%d:%4d-%02d-%02d %02d:%02d:%02d\n",line,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
    48				fflush(fp);
    49			}
    50		}
    51		//关闭文件指针
    52		fclose(fp);
    53	
    54	
    55	
    56		return 0;
    57	}
    58	
    59	

4>使用fread、fwrite完成两个文件的拷贝

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义两个文件指针
     9		FILE *fpsrc = NULL;
    10		FILE *fpdest = NULL;
    11		
    12		//以只读方式打开源文件
    13		if((fpsrc = fopen("./01fopen.c","r")) == NULL){
    14			perror("src fopen error");
    15			return -1;
    16		}
    17	
    18		//以只写方式打开目标文件
    19		if((fpdest = fopen("./13test.txt","w")) == NULL){
    20			perror("dest fopen error");
    21			return -1;
    22		}
    23	
    24		char temp[1024] = "";
    25		int k = 0;
    26		//将源文件写入目标文件
    27		while((k = fread(temp,1,sizeof(temp),fpsrc)) != 0){
    28			fwrite(temp,1,k,fpdest);
    29		}
    30		puts("copy success");
    31		
    32		//关闭文件指针
    33		fclose(fpsrc);
    34		fclose(fpdest);
    35	
    36		return 0;
    37	}
    38	
    39	

1.fopen

   1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		FILE *fp = NULL;
    10	
    11		//打开文件,将地址赋值给文件指针fp,根据fp指向是否为空判断是否打开成功
    12		if((fp = fopen("./01test.c","w")) == NULL){
    13			perror("fopen error");  	//如打开失败,将错误码信息通过perror输出
    14			return -1;
    15		}else{
    16			printf("success\n"); 	//如打开成功,输出success
    17		}
    18		fclose(fp); 	//关闭文件指针
    19		return 0;
    20	}
    21	
    22	

2.fclose

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		FILE *fp = NULL;
    10		
    11		//用fp接fopen的返回值,通过判断fp的指向是否为NULL判断文件是否打开
    12		if((fp = fopen("./01test.c","r")) == NULL){ 	//只读形式打开
    13			perror("fopen error"); 	//如果打开失败,将错误码信息perror输出
    14			return -1;
    15		}else{
    16			puts("open success");
    17		}
    18	
    19		//关闭指针
    20		//通过判断fclose的返回值判断fp指针是否关闭成功
    21		if(fclose(fp) != 0){
    22			puts("fclose failed");
    23		}else{
    24			puts("fclose success");
    25		}
    26		
    27		return 0;
    28	}
    29	
    30	

3.errno

     1	#include 
     2	#include 
     3	#include 
     4	#include  	//错误码所在的头文件
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//创建文件指针
     9		FILE *fp = NULL;
    10		
    11		//判断是否创建成功
    12		if((fp = fopen("./02test.c","r")) == NULL){ 	//只读的方式打开一个不存在的文件
    13			
    14			strerror(errno); 	//方式1 ,将错误码信息转换位字符串
    15			printf("%s\n",strerror(errno)); 	//输出字符串
    16			
    17			perror("fopen error"); 	//方式2,通过perror直接将错误码输出,相当于上面两个函数
    18			return -1;
    19		}
    20	
    21		//关闭文件指针
    22		fclose(fp);
    23		return 0;
    24	}
    25	
    26	

4.fputc

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		// 定义文件指针
     9		FILE *fp = NULL;
    10		//判断文件是否按只写的方式打开
    11		if((fp = fopen("./01test.c","w")) == NULL){
    12			perror("fopen error");
    13			return -1;
    14		}
    15		
    16		//将字符通过fputc写入fp所指向的文件中
    17		fputc('H',fp);
    18		fputc('e',fp);
    19		fputc('l',fp);
    20		fputc('l',fp);
    21		fputc('o',fp);
    22		fputc('\n',fp);
    23	
    24		//关闭文件
    25		fclose(fp);
    26	
    27	
    28		return 0;
    29	}
    30	
    31	

5.fgetc

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		FILE *fp = NULL;
    10	
    11		//判断文件是否成功按只读的方式打开成功
    12		//如果不成功输出错误码所对应的信息
    13		if((fp = fopen("./01test.c","r")) == NULL){
    14			perror("fopen error");
    15			return -1;
    16		}
    17	
    18		//定义容器接收fgetc的返回值
    19		//当不等于EOF时输出到屏幕
    20		//当等于EOF时,说明已经到了文件结尾
    21		char ch = '\0';
    22		while((ch = fgetc(fp)) != EOF){
    23			printf("%c ",ch);
    24		}
    25	
    26		//关闭文件指针
    27		fclose(fp);
    28	
    29		return 0;
    30	}
    31	
    32	

6.行数

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		// argc 执行文件时,传入文件的个数
     9		// argv 文件数组
    10		// 判断文件是否为2
    11		if(2 != argc){
    12			puts("input file error");
    13			puts("usage: ./a.out fileName");
    14			return -1;
    15		}
    16	
    17		//定义文件指针
    18		FILE *fp = NULL;
    19	
    20		//以只读的形式打开文件
    21		// argv[1]是文件数组,不需要加 “”
    22		if((fp = fopen(argv[1],"r")) == NULL){ 
    23			perror("fopen error");
    24			return -1;
    25		}
    26		
    27		//定义容器和计数器记录读取的值
    28		//当读取到目标字符时,计数器自增
    29		//输出计数器的值,就是目标字符的个数
    30		int count = 0;
    31		char ch = '\0';
    32		while((ch = fgetc(fp)) != EOF){
    33			if(ch == '\n'){
    34				count ++;		
    35			}
    36		}
    37		printf("一共%d行\n",count);
    38	
    39		//关闭文件指针
    40		fclose(fp);
    41		return 0;
    42	}
    43	
    44	

7.copy

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//判断文件个数是否为3
     9		if(3 != argc){
    10			puts("input file error");
    11			puts("usage: ./a.out Src_fileName dst_fileName");
    12			return -1;
    13		}
    14	
    15		//定义两个文件指针指向两个文件
    16		FILE *fpsrc = NULL;
    17		FILE *fpdst = NULL;
    18	
    19		//判断第一个文件是否以只读的方式打开
    20		if((fpsrc = fopen(argv[1],"r")) == NULL){
    21			perror("fopen Src_fileName error");
    22			return -1;
    23		}
    24		//判断第二个文件是否以只写的方式打开
    25		if((fpdst = fopen(argv[2],"w")) == NULL){
    26			perror("fopen dst_fileName error");
    27			return -1;
    28		}
    29		//定义容器
    30		char ch = '\0';
    31		//循环从源文件中读取数据
    32		//循还将数据放入到目标文件
    33		while((ch = fgetc(fpsrc)) != EOF){
    34			fputc(ch,fpdst);
    35		}
    36		//关闭文件指针
    37		fclose(fpsrc);
    38		fclose(fpdst);
    39	
    40		puts("copy success");
    41		return 0;
    42	}
    43	
    44

8.fputs

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		FILE *fp = NULL;
    10		//以只写的方式打开一个文件
    11		if((fp = fopen("./03test.c","w")) == NULL){
    12			perror("fopen error");
    13			return -1;
    14		}
    15		//将字符串输出到文件
    16		fputs("hello world1\n",fp);
    17		fputs("hello world2\n",fp);
    18		fputs("hello world3\n",fp);
    19	
    20		//关闭文件指针
    21		fclose(fp);
    22	
    23		return 0;
    24	}
    25	
    26

9.fgets

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		char s[128];
     9	
    10		//从标准输入文件中读取数据到s中
    11		fgets(s,sizeof(s),stdin);
    12		
    13		//如果最后一个字符是'\n',将最后一个'\n' 转换成'\0'
    14		if((s[strlen(s)-1]) == '\n'){
    15			s[strlen(s)-1] = '\0';
    16		}
    17		printf("s = %s\n",s);
    18	
    19		return 0;
    20	}
    21	

10.缓冲区

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//验证行缓存大小为1024字节
     9		//如果没有使用缓存区,那么其大小为0
    10		printf("row = %ld\n",stdin->_IO_buf_end - stdin->_IO_buf_base);
    11		//使用标准输入指针
    12		char s[128];
    13		fgets(s,sizeof(s)-1,stdin);
    14		printf("s = %s",s);
    15		//使用缓存区后,大小为1024
    16		printf("row = %ld\n",stdin->_IO_buf_end - stdin->_IO_buf_base);
    17	
    18		//验证全缓存大小为4096字节
    19		FILE *fp = NULL;
    20		if((fp = fopen("./10test.c","w")) == NULL){
    21			perror("fopen error");
    22			return -1;
    23		}
    24		fputs("Hello world",fp);
    25		printf("all = %ld\n",fp->_IO_buf_end - fp->_IO_buf_base);
    26		
    27		fclose(fp);
    28	
    29		//验证不缓存大小为0
    30		//输出为1是为指针占位
    31		fputs("error\n",stderr); 	//向标准出错中输入数据
    32		printf("no = %ld\n",stderr->_IO_buf_end - stderr-> _IO_buf_base);
    33	
    34	
    35		return 0;
    36	}
    37	
    38	

11.fflush

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//不刷新时机
     9		//0.当缓存区没有刷新时机是,不会刷新缓存区
    10		//printf("hello");
    11		//while(1);
    12		
    13		//刷新实际
    14		//1.遇到换行符
    15		//printf("hello world\n");
    16		//while(1);
    17	
    18		//2.程序结束
    19		//printf("hello");
    20	
    21		//3.关闭文件指针
    22		//printf("hello");
    23		//fclose(stdout); //手动关闭标准输出文件指针
    24		//while(1); //此时程序并没有结束,需要ctrl+c终止
    25	
    26		//4.fflush函数
    27		//printf("hello");
    28		//fflush(stdout);
    29		//while(1);
    30	
    31		//5.缓存区满
    32		//int i = 0;
    33		//for(i = 0; i < 1500; i++){
    34		//	printf("A ");
    35		//}	
    36		//while(1);
    37	
    38	
    39		//6.输入输出切换
    40		//int num = 0;
    41		//printf("please enter a number");
    42		//scanf("%d",&num);
    43		//printf("num = %d",num);
    44		//while(1);
    45	
    46	
    47		//全缓存
    48		FILE *fp = NULL;
    49		if((fp = fopen("./05test.c","w")) == NULL){
    50			perror("fopen error");
    51			return -1;
    52		}
    53		//不刷新
    54		//0. 当遇到换行符时,不刷新时机
    55		//fputs("hello world\n",fp);
    56		//while(1);
    57		
    58		//刷新
    59		// 1.当程序结束时刷新
    60		//fputs("hello world\n",fp);
    61	
    62		//2.当指针关闭时刷新
    63		//fputs("你好\n",fp);
    64		//fclose(fp);
    65		//while(1);  //程序此时并没有结束
    66		
    67		// 3.使用fflush函数刷新
    68		//fputs("hello world\n",fp);
    69		//fflush(fp);
    70		//while(1);
    71	
    72		//4.输入输出切换时刷新
    73		//fputc('h',fp);
    74		//fgetc(fp);
    75		//while(1);
    76	
    77		//5.当缓存区满时刷新
    78		int i = 0;
    79		for(i = 0; i < 6666; i++){
    80			fputc('c',fp);
    81		}
    82		while(1);
    83	
    84		return 0;
    85	}
    86	
    87	

12.time

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	#include 
     7	int main(int argc, const char *argv[])
     8	{
     9		//定义时间类型变量,保存秒数
    10		//调用time函数,获取秒数赋值给变量	
    11		time_t T = time(NULL);
    12		//调用localtime函数将秒数转变为标准时间保存在struct tm类型的变量中
    13		struct tm *t = localtime(&T);//localtime函数
    14	
    15		//输出获取的时间
    16		printf("%4d-%02d-%02d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
    17	
    18		return 0;
    19	}
    20	
    21	

13.sprintf

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	#include 
     7	int main(int argc, const char *argv[])
     8	{
     9		//定义时间类型变量,保存time函数获取的秒数
    10		time_t T = time(NULL);
    11		//调用localtime函数将获得的秒数转换为标准时间赋值
    12		//给struct tm类型的时间指针
    13		struct tm *t = localtime(&T);
    14	
    15		//输出获取的时间
    16		printf("%4d-%02d-%02d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
    17	
    18		//定义一个数组将时间写入数组
    19		char buf[128] = "";
    20		sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
    21	
    22		//打印数组中的值
    23		printf("%s",buf);
    24	
    25		return 0;
    26	}
    27	

14.snprintf

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义一个容器
     9		char buf[10];
    10		//如果数组溢出,执行会出现段错误
    11		//sprintf(buf,"abcdefghijklmn");
    12		//会报警告,但是不会出现段错误,
    13		//会将sizeof(str)-1个元素放入str
    14		snprintf(buf,sizeof(buf),"abcdefghijklmn");
    15		printf("%s\n",buf);
    16		return 0;
    17	}
    18	
    19	

15.fprintf/fscanf

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		//判断文件是否以追加的方式打开成功
    10		FILE *fp = NULL;
    11		char userName[32];
    12		char pwd[32];
    13		int num = 0;
    14		int i = 0;
    15		if((fp = fopen("./06test.txt","a")) == NULL){
    16			perror("open error");
    17			return -1;
    18		}
    19		
    20		//将账号和密码输入
    21		printf("请输入要存入的账号和密码的个数\n");
    22		scanf("%d",&num);
    23		for(i = 1; i <= num; i++){
    24			printf("please enter the NO.%d register now\n",i);
    25			scanf("%s",userName);
    26			printf("please enter the NO.%d password\n",i);
    27			scanf("%s",pwd);
    28			//将账号和密码输入到文件中
    29			fprintf(fp,"%s %s\n",userName,pwd);
    30		}
    31	
    32		
    33		//关闭文件
    34		fclose(fp);
    35	
    36		//再以只读的方式打开文件
    37		if((fp = fopen("./06test.txt","r")) == NULL){
    38			perror("Fopen error");
    39			return -1;
    40		}
    41		//定义变量接受登录账号和密码
    42		char Inname[32];
    43		char Inpwd[32];
    44		printf("please enter the log in Name\n");
    45		scanf("%s",Inname);
    46		printf("please enter the log in pwd\n");
    47		scanf("%s",Inpwd);
    48		
    49		//比对登录账号和密码与已存入的进行比对
    50		while(fscanf(fp,"%s %s",userName,pwd) != EOF){
    51			if(0 == strcmp(userName,Inname) && 0 == strcmp(pwd,Inpwd)){
    52				printf("success\n");
    53				fclose(fp);
    54				return 2;
    55			}
    56		}
    57		printf("fail\n");
    58		fclose(fp);
    59	
    60		return 0;
    61	}
    62	
    63	

16.fread

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		//判断是否以追加的方式打开文件
    10		FILE *fp = NULL;
    11		if((fp = fopen("./07test.txt","a+")) == NULL){
    12			perror("fopen error");
    13			return -1;
    14		}
    15		char s[] = "hello world";
    16		//使用fwrite将字符串写入文件中
    17		fwrite(s,1,sizeof(s),fp);
    18	
    19		//关闭文件
    20		fclose(fp);
    21	
    22	
    23		//判断是否以只读的方式打开文件
    24		if((fp = fopen("./07test.txt","r")) == NULL){
    25			perror("fopen error");
    26			return -1;
    27		}
    28		//用fread将fp指向空间的数据读入到buf内
    29		//空间指针,每一项的大小,项数,文件指针
    30		char buf[1024] = "";
    31		int ret = fread(buf,1,sizeof(buf),fp);
    32		
    33		//输出buf的数据,只输出sizeof(buf) 个值
    34		printf("buf = %s\n",buf);
    35		
    36		//将buf文件中的值输出
    37		fwrite(buf,1,ret,stdout);
    38		
    39		//关闭文件
    40		fclose(fp);
    41	
    42		return 0;
    43	}
    44	
    45	

17.fread2

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		// 定义文件指针
     9		FILE *fp = NULL;
    10		//以只写的方式打开文件
    11		if((fp = fopen("./07test.txt","w")) == NULL){
    12			perror("fopen error");
    13			return -1;
    14		}
    15		//通过取址将变量的值写入fp指向的文件
    16		int num = 520;
    17		fwrite(&num,sizeof(num),1,fp);
    18		//关闭指针
    19		fclose(fp);
    20	
    21		//以只读的形式打开文件
    22		if((fp = fopen("./07test.txt","r")) == NULL){
    23			perror("fopen error");
    24			return -1;
    25		}
    26		//以fread将fp指向地址内的数据读取到key所在的地址中
    27		int key = 0;
    28		int ret = fread(&key,sizeof(key),1,fp);
    29		//将文件输出
    30		printf("key = %d\n",key);
    31	
    32		fclose(fp);
    33	
    34	
    35		return 0;
    36	}
    37	

18.fread3

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	struct Stu{
     7		char name[20];
     8		int age;
     9		double score;
    10	};
    11	
    12	int main(int argc, const char *argv[])
    13	{
    14		//定义文件指针
    15		FILE *fp = NULL;
    16		//以只写的形式打开文件
    17		if((fp = fopen("./08test.txt","w")) == NULL){
    18			perror("fopen error");
    19			return -1;
    20		}
    21		//定义两个结构体变量
    22		struct Stu s[2] = {{"zhangsan",18,99.88},{"lisi",22,99.99}};
    23		//向文件中写入两个学生的数据
    24		fwrite(s,sizeof(struct Stu),2,fp);
    25		//关闭文件
    26		fclose(fp);
    27	
    28		//以只读的形式打开文件
    29		if((fp = fopen("./08test.txt","r")) == NULL){
    30			perror("fopen error");
    31			return -1;
    32		}
    33		//用fread读取数据
    34		struct Stu stu;
    35		fread(&stu,sizeof(struct Stu),1,fp);
    36		printf("name = %s\nage = %d\nscore = %lf\n",stu.name,stu.age,stu.score);
    37	
    38		//关闭指针
    39		fclose(fp);
    40	
    41		return 0;
    42	}
    43	
    44	

19.feof

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		FILE *fp = NULL;
     9		//以只读的形式打开文件
    10		if((fp = fopen("./01fopen.c","r")) == NULL){
    11			perror("fopen error");
    12			return -1;
    13		}
    14		char ch = '\0';
    15		while(1){
    16			ch = fgetc(fp);
    17			printf("%c",ch);
    18			if(feof(fp)){
    19				puts("读到文件末尾");
    20				break;
    21			}else if(ferror(fp)){
    22				puts("读取文件失败");
    23				break;
    24			}
    25		}
    26		//关闭文件
    27		fclose(fp);
    28	
    29	
    30	
    31		return 0;
    32	}
    33	
    34	

20.fseek

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	struct Stu{
     7		char name[20];
     8		int age;
     9		double score;
    10	};
    11	
    12	int main(int argc, const char *argv[])
    13	{
    14		//定义文件指针
    15		FILE *fp = NULL;
    16		//以只写的形式打开文件
    17		if((fp = fopen("./08test.txt","w")) == NULL){
    18			perror("fopen error");
    19			return -1;
    20		}
    21		//定义两个结构体变量
    22		struct Stu s[2] = {{"zhangsan",18,99.88},{"lisi",22,99.99}};
    23		//向文件中写入两个学生的数据
    24		fwrite(s,sizeof(struct Stu),2,fp);
    25		//关闭文件
    26		fclose(fp);
    27	
    28		//以只读的形式打开文件
    29		if((fp = fopen("./08test.txt","r")) == NULL){
    30			perror("fopen error");
    31			return -1;
    32		}
    33	
    34		//要读取第二个学生信息,定位光标从开始位置向后偏移struct Stu大小
    35		//用fread读取数据
    36		struct Stu stu;
    37		fseek(fp,sizeof(struct Stu),SEEK_SET);
    38		fread(&stu,sizeof(struct Stu),1,fp);
    39		printf("name = %s\nage = %d\nscore = %lf\n",stu.name,stu.age,stu.score);
    40	
    41		//关闭指针
    42		fclose(fp);
    43	
    44		return 0;
    45	}
    46	
    47

21.fseek2

     1	#include 
     2	#include 
     3	#include 
     4	#include 
     5	#include 
     6	int main(int argc, const char *argv[])
     7	{
     8		//定义文件指针
     9		//以追加的形式打开文件
    10		FILE *fp = NULL;
    11		if((fp = fopen("./09test.txt","a")) == NULL){
    12			perror("fopen error");
    13			return -1;
    14		}
    15		//更新指针执行到开头
    16		
    17		fseek(fp,0,SEEK_SET);
    18		// 向文件中写入数据
    19		fputs("long time no see\n",fp); 
    20	
    21		fclose(fp);
    22		return 0;
    23	}
    24	

你可能感兴趣的:(IO进程线程,c语言)