华清远见作业第二十天——IO(第三天)

思维导图:

使用标准IO完成两个文件的拷贝

代码:

#include
#include
#include
#include 
#include 
#include 
int main(int argc, const char *argv[])
{
	if(argc !=3)
	{
		printf("内容问题\n");
		return 0;
	}
	//定义文件指针
	FILE *rfp=NULL; //源文件
	FILE *wfp=NULL; //目标文件
	//以只读的形式打开源文件
	if((rfp=fopen(argv[1],"r"))==NULL)
	{
		perror("rfp error");
		return -1;
	}
	//以只写的形式打开目标文件
	if((wfp=fopen(argv[2],"w"))==NULL)
	{
		perror("wfp error");
		return -1;
	}
	//定义一个字符搬运工
	char buf=0;
	while(1)
	{
		buf=fgetc(rfp); //读取文件到字符搬运工
		if(buf==EOF)
		{
			printf("拷贝完成\n");
			break;
		}
		fputc(buf,wfp);  //写入数据
	}
	//关闭文件
	fclose(rfp);
	fclose(wfp);
	return 0;
}

运行效果:

华清远见作业第二十天——IO(第三天)_第1张图片

使用文件IO完成两个文件的拷贝

代码:

#include
int main(int argc, const char *argv[])
{
	//判断内容
	if(argc!=3)
	{
		printf("内容错误\n");
		return -1;
	}
	//定义文件标示符号
	int rfd=-1;
	int wfd=-1;
	//以只读的形式打开文件
	if((rfd=open(argv[1],O_RDONLY))==-1)
	{
		perror("rfd error:");
		return -1;
	}
	//以只写的形式打开文件
	if((wfd=open(argv[2],O_WRONLY))==-1)
	{
		perror("wfd error:");
		return -1;
	}
	//定义存储容器
	char rbuf[128]="";
	//定义返回字节读数
	int res=0;
	//循序取值
	while(1)
	{
		res=read(rfd,rbuf,sizeof(rbuf)); 	//读取
		if(res==0)
		{
			printf("拷贝完成\n");
			break;
		}
		write(wfd,rbuf,res); //写入
	
	}
	//关闭文件
	close(rfd);
	close(wfd);
	return 0;
}

运行效果: 

华清远见作业第二十天——IO(第三天)_第2张图片

将stat函数实现一遍

代码:

#include
int main(int argc, const char *argv[])
{
	if(argc!=2)
	{
		printf("内容错误\n");
		return -1;	
	}
	//定义文件属性类型的数据
	struct stat sb;//用于存储获得的文件属性
	//调用函数的文件属性
	stat(argv[1],&sb);
	switch(sb.st_mode&S_IFMT)
	{
	case S_IFSOCK:
		{
			printf("这是套接字文件\t");

		}
		break;
	case S_IFLNK:
		{
			printf("这是链接文件\t");
		}
		break;
	case S_IFREG:
		{
			printf("这是普通文件\t");
		}
		break;
	case S_IFBLK:
		{
			printf("这是块设备文件\t");
		}
		break;
	case S_IFDIR:
		{
			printf("这是目录文件\t");
		}
		break;
	case S_IFCHR:
		{
			printf("这是字符设备文件\n");
		}
		break;
	case S_IFIFO:
		{
			printf("这是管道文件\t");
		}
		break;

	}
	printf("%#o\t%ld\t%ld\n",sb.st_mode&0777,sb.st_size,sb.st_ino);
	return 0;
}

运行效果:

华清远见作业第二十天——IO(第三天)_第3张图片

将目录操作实现一遍

代码:

#include
int main(int argc, const char *argv[])
{
	//外部传参
	if(argc!=2)
	{
		printf("内容错误\n");
		return -1;
	}
	//定义目录指针
	DIR *dp=NULL;
	//打开目录
	if((dp=opendir(argv[1]))==NULL)
	{
		perror("dp error");
		return -1;
	}
	//读取目录信息
	struct dirent *sdp=NULL;
	while((sdp=readdir(dp))!=NULL) //循环读取
	{
		//输出当前文件或目录的信息
		printf("inode:%10ld,size:%10d,%10s,",\
				sdp->d_ino,sdp->d_reclen,sdp->d_name);
		//输出文件类型
		switch(sdp->d_type)
		{
		case DT_BLK:
			{
				printf("b\n");
			}
			break;
		case DT_CHR:
			{
				printf("c\n");
			}
			break;
		case DT_DIR:
			{
				printf("d\n");
			}
			break;
		case DT_FIFO:
			{
				printf("p\n");
			}
			break;
		case DT_LNK:
			{
				printf("l\n");
			}
			break;
		case DT_REG:
			{
				printf("-\n");
			}
			break;
		case DT_SOCK:
			{
				printf("s\n");
			}
			break;
		}
	}
	//关闭目录
	closedir(dp);
	return 0;
}

运行效果:

华清远见作业第二十天——IO(第三天)_第4张图片

你可能感兴趣的:(华清远见作业,c语言)