IO / day01 作业。

1.使用fgets统计一个文件的行号

cpp 复制代码
//使用fgets统计一个文件的行号

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, const char *argv[])
{
	if(argc<2) //获取文件名
	{
		printf("input error\n!");
		printf("usage: ./a.out file\n");
	}

	FILE *fp;

	if( (fp=fopen(argv[1], "r"))==NULL ) //打开文件
	{
		perror("fopen");
		return -1;
	}

	int count=0;
	char buf[16] = ""; //定义fgets一次获取字符串


	while(1)
	{

		if(fgets(buf, sizeof(buf), fp)==NULL) //判断是否到文件尾部了
		{
			break;
		}
		//printf("buf=%s", buf);
		
		for(int i=0; buf[i]!='\0'; i++) //搜索\n
		{
		
			if(buf[i]=='\n')
			{
				count++;
				//printf("count=%d\n", count);
				break;
			}
		}
	}
	printf("total lines=%d\n", count);

	fclose(fp); //关闭文件


	return 0;
}

2.使用fgets\fputs拷贝两个文件

cpp 复制代码
//使用fgets\fputs拷贝两个文件

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, const char *argv[])
{

	if(argc!=3)//获取目标,原文件名
	{
		printf("input files error\nusage: ./a.out dest src\n");
		return -1;
	}
	
	FILE *src;
	FILE *dest;

	if( (src = fopen(argv[1], "r"))==NULL ) //判断文件打开是否成功
	{
		perror("src fopen");
		return -1;
	}


	if( (dest = fopen(argv[2], "w"))==NULL ) //判断文件打开是否成功

	{
		perror("dest fopen");
		return -1;
	}

	char buf[4] = ""; //拷贝读取和写入的缓存

	while( fgets(buf, sizeof(buf), src) != NULL) //读取+判断文件是否到尾部
	{
	
		fputs(buf, dest);//写入目标文件
	}

	fclose(src); //关闭文件
	fclose(dest);
	puts("copy successed!\n");

	return 0;

}

3. 思维导图

相关推荐
wljy12 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++
mzhan0172 小时前
Linux: coredump产生对程序退出的影响
linux·运维·服务器
光电笑映3 小时前
从环境变量到进程虚拟地址空间——Linux 内存管理的底层脉络
linux·服务器·c++·c
源远流长jerry3 小时前
Linux 网络收包机制:从网卡到 Socket 的完整路径
linux·运维·服务器·网络·网络协议·tcp/ip
♛识尔如昼♛3 小时前
C 进阶(5) - 系统数据文件和信息
c语言·系统文件和信息
明飞19874 小时前
预处理指令
c语言
杰 .4 小时前
Linux工具使用
linux·服务器
Gc9umsbL15 小时前
零基础学Linux:21天从“命令小白”到独立部署服务器
linux·运维·服务器
骑着骆驼写程序5 小时前
Ubuntu上部署前端项目报500错误
linux·运维·ubuntu
小娄~~6 小时前
进程间通信
linux·运维·服务器