IO进程线程Day1

本文详细介绍了如何使用fgetc和fgets函数分别计算文件大小和行数,并展示了用fgets实现文件拷贝和内容计数的实例。通过main.c、fun.c和fun.h文件的组织,展示了封装函数和处理不同文件操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用fgetc计算一个文件的大小,要求封装成函数

main.c

#include<stdio.h>
#include"work.h"
int main(int argc, const char *argv[])
{
	//打开文件
	 FILE *FP = fopen(argv[1],"r");//定义FP为流指针
	int num=lenth(FP);//调用求长度函数
	printf("字符数为%d\n",num);
	fclose(FP);//别忘记关闭文件,防止内存泄露
	return 0;
}

fun1.c

#include<stdio.h>
#include<errno.h>
#include"work.h"
int lenth(FILE*FP)
{
	if(NULL==FP)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	char c;
	int count=0;
	for(c=fgetc(FP);c!=EOF;c=fgetc(FP))//循环取内容,直到取到文件结尾
	{
		count++;//每进行一次取值,记录次数
	}
	return count;//返回记录的次数即是文件内容数
}

fun.h

#ifndef __work_h_
#define __work_h_


int lenth(FILE*FP);//用fgetc计算文件大小




#endif

用fgetc计算一个文件有几行,要求封装成函数(linux操作系统以\n结尾,就算是最后一行也有一个’\n’)

mian.c

#include<stdio.h>
#include"work.h"
int main(int argc, const char *argv[])
{
	//打开文件
	 FILE *FP = fopen(argv[1],"r");//定义FP为流指针
	int num=lenth(FP);//调用求长度函数
	printf("字符数为%d\n",num);
	fclose(FP);
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	int num2=line_num(FP);//调用求行数函数
	printf("行数为%d\n",num2);
	fclose(FP);//别忘记关闭文件,防止内存泄露
	return 0;
}

fun.h

#ifndef __work_h_
#define __work_h_


int lenth(FILE*FP);//用fgetc计算文件大小

int line_num(FILE*FP);//用途fgetc计算一个文件有几行  



#endif

fun.c

#include<stdio.h>
#include<errno.h>
#include"work.h"
int line_num(FILE*FP)
{
	if(NULL==FP)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	char c;
	int count=0;
	for(c=fgetc(FP);c!=EOF;c=fgetc(FP))//循环取内容,直到取到文件结尾
	{
		if(c == '\n')
		{
			count++;//每进行换行,记录次数
		}
	}
	return count;//返回记录的次数即是换行数
}

用fgets和fputs实现,拷贝一个文件,例如将1.c的内容拷贝给2.c

main.c

#include<stdio.h>
#include"work.h"
int main(int argc, const char *argv[])
{
	char arr[999];
	//打开文件
	 FILE *FP = fopen(argv[1],"r");//定义FP为流指针
	 FILE *EP = fopen("./fun3.c","a");
	int num=lenth(FP);//调用求长度函数
	printf("字符数为%d\n",num);
	fclose(FP);
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	int num2=line_num(FP);//调用求长度函数
	printf("行数为%d\n",num2);
	fclose(FP);
	
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	fgets_cp(arr,num,FP,EP);
	fclose(FP);//别忘记关闭文件,防止内存泄露
	return 0;
}

fun.c

#include<stdio.h>
#include<errno.h>
#include"work.h"
int fgets_cp(char *arr,int lenth,FILE*FP,FILE*EP)
{
	if(NULL==FP || NULL==EP)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	while(1)
	{
		if(fgets(arr,lenth+1,FP)==NULL)
		break;	
		fputs(arr,EP);
	}
	return 0;//返回记录的次数即是换行数
}

fun.h

#ifndef __work_h_
#define __work_h_


int lenth(FILE*FP);//用fgetc计算文件大小

int line_num(FILE*FP);//用途fgetc计算一个文件有几行  

int fgets_cp(char *arr,int num,FILE*FP,FILE*EP);//用fgets和fputs将1.c的内容拷贝给2.c


#endif

用fgets计算一个文件的大小,要求封装成函数

fun.c

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include"work.h"
int fgets_lenth(char *arr,int lenth,FILE*FP)
{
	if(NULL==FP)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	int size=0;
	while(1)
	{
		
		if(fgets(arr,lenth,FP)==NULL)
		{
			break;	
		}
		size+=strlen(arr);
	}
	return size;
}

fun.h

#ifndef __work_h_
#define __work_h_


int lenth(FILE*FP);//用fgetc计算文件大小

int line_num(FILE*FP);//用途fgetc计算一个文件有几行  

int fgets_cp(char *arr,int num,FILE*FP,FILE*EP);//用fgets将文件1拷贝到文件2中

int fgets_lenth(char *arr,int lenth,FILE*FP);//用fgets计算文件大小

#endif

main.c

#include<stdio.h>
#include"work.h"
#include<string.h>
int main(int argc, const char *argv[])
{
	char arr[999];
	//打开文件
	 FILE *FP = fopen(argv[1],"r");//定义FP为流指针
	 FILE *EP = fopen("./fun3.c","a");
	int num=lenth(FP);//调用求长度函数
	printf("字符数为%d\n",num);
	fclose(FP);
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	int num2=line_num(FP);//调用求长度函数
	printf("行数为%d\n",num2);
	fclose(FP);
	
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	fgets_cp(arr,num,FP,EP);
	fclose(FP);//别忘记关闭文件,防止内存泄露
	FP = fopen(argv[1],"r");
	int size=fgets_lenth(arr,num,FP);
	printf("%d\n",size);
	fclose(FP);

	return 0;
}

用fgets计算一个文件有几行,要求封装成函数(linux操作系统以\n结尾,就算是最后一行也有一个’\n’)

main.c

#include<stdio.h>
#include"work.h"
#include<string.h>
int main(int argc, const char *argv[])
{
	char arr[999];
	//打开文件
	 FILE *FP = fopen(argv[1],"r");//定义FP为流指针
	 FILE *EP = fopen("./fun3.c","a");
	int num=lenth(FP);//调用求长度函数
	printf("字符数为%d\n",num);
	fclose(FP);
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	int num2=line_num(FP);//调用求长度函数
	printf("行数为%d\n",num2);
	fclose(FP);
	
	FP = fopen(argv[1],"r");//关闭再打开,重置文件偏移量
	fgets_cp(arr,num,FP,EP);
	fclose(FP);//别忘记关闭文件,防止内存泄露
	FP = fopen(argv[1],"r");
	int size=fgets_lenth(arr,num,FP);
	printf("字符数为%d\n",size);
	fclose(FP);
	FP = fopen(argv[1],"r");
	int count=fgets_line(arr,num,FP);
	fclose(FP);
	printf("行数为%d\n",count);
	return 0;
}

fun.c

#include<stdio.h>
#include<errno.h>
#include<string.h>
#include"work.h"
int fgets_line(char *arr,int lenth,FILE*FP)
{
	if(NULL==FP)//判断传入的参数文件是否为空
	{
		perror("fopen");
		return -1;
	}
	int count=0;
	while(1)
	{
		
		if(fgets(arr,lenth,FP)==NULL)//判断取到文件结尾
		{
			break;	
		}
		count++;//每取到一次\n记一次换行
	}
	return count;
}

fun.h

#ifndef __work_h_
#define __work_h_


int lenth(FILE*FP);//用fgetc计算文件大小

int line_num(FILE*FP);//用途fgetc计算一个文件有几行  

int fgets_cp(char *arr,int num,FILE*FP,FILE*EP);//用fgets将文件1拷贝到文件2中


int fgets_lenth(char *arr,int lenth,FILE*FP);//用fgets计算文件大小

int fgets_line(char *arr,int lenth,FILE*FP);//用fgets计算文件行数

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值