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. 思维导图

相关推荐
xlq2232213 分钟前
34 信号
linux
木下~learning31 分钟前
对于Linux中等待队列和工作队列的讲解和使用|RK3399
linux·c语言·网络·模块化编程·工作队列·等待队列
齐齐大魔王36 分钟前
linux-核心工具
linux·运维·服务器
醇氧36 分钟前
Linux 系统的启动过程
linux·运维·服务器
IMPYLH37 分钟前
Linux 的 dircolors 命令
linux·运维·服务器·数据库
齐齐大魔王40 分钟前
linux-基础操作
linux·运维·服务器
是翔仔呐1 小时前
第13章 SPI通信协议全解:底层时序、4种工作模式与W25Qxx Flash芯片读写实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
bwz999@88.com1 小时前
ubuntu24.04更换国内源
linux·运维·服务器
IT方大同1 小时前
RT_thread(RTOS实时操作系统)线程的创建与切换
c语言·开发语言·嵌入式硬件
历程里程碑1 小时前
Protobuf 环境搭建:Windows 与 Linux 系统安装教程
linux·运维·数据结构·windows·线性代数·算法·矩阵