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

相关推荐
AD钙奶-lalala2 分钟前
Error starting ApplicationContext. To display the condition evaluation···
linux·运维·服务器
71ber7 分钟前
RHCSE 实战笔记: LVS 负载均衡集群深度解析
linux·服务器·lvs
Byte不洛17 分钟前
TCP 服务器如何支持高并发?单进程、多进程、多线程模型详解
linux·网络编程·高并发·tcp·socket编程
Jia ming19 分钟前
Linux内核动态调试技术揭秘
linux·内核动态调试
暴力求解20 分钟前
Linux --调试器gdb和cgdb
linux·运维·服务器
陈桴浮海30 分钟前
【Linux&Ansible】学习笔记合集七
linux·学习·ansible
静谧空间36 分钟前
linux安装Squid
linux·运维·爬虫
济61739 分钟前
I.MX6U 开发板网络环境搭建---- TFTP 环境搭建-- Ubuntu20.04
linux·网络·驱动开发
Ffe11 小时前
Linux提权五:Rbash绕过&Docker&LXD镜像
linux·docker·lxd·提权笔记总结
!沧海@一粟!1 小时前
Linux-配置虚拟IP实例
linux·网络