嵌入式学习-IO进程线程-Day2

Day2

思维导图

嵌入式学习-IO进程线程-Day2_第1张图片

作业

1、使用fread、fwrite完成两个文件的拷贝

代码
#include 
#include 
#include 
int main(int argc, const char *argv[])
{
	//
	if(argc != 3)
	{
		puts("input file error!");
		puts("usage:./a.out srcfile destfile");
		return 0;
	}

	FILE *srcfp=0;
	FILE *destfp=0;
//源文件只读打开
	if((srcfp=fopen(argv[1],"r"))==0)
	{
		perror("srcfile open error");
		return -1;
	}
//目标文件只写打开
	if((destfp=fopen(argv[2],"w"))==0)
	{
		perror("destfile open error");
		return -1;
	}
//定义一个字符搬运工
	char buf[10]="";
	while(!feof(srcfp))
	{	
		int res=fread(buf,1,sizeof(buf),srcfp);
		fwrite(buf,1,res,destfp);
	}

	fclose(srcfp);
	fclose(destfp);

	puts("copy success");
	return 0;
}

嵌入式学习-IO进程线程-Day2_第2张图片

2、将注册登录框架重新实现一遍

代码
#include 
#include 
#include 
int do_register()
{
	//Open file for append
	FILE *wfp=0;
	char account_reg[20];
	char pwd_reg[20];

	printf("please enter account_reg:");
	fgets(account_reg,sizeof(account_reg),stdin);
	printf("please enter pwd_reg:");
	fgets(pwd_reg,sizeof(pwd_reg),stdin);

	//将字符串中的换行改为'\0'
	account_reg[strlen(account_reg)-1]='\0';
	pwd_reg[strlen(pwd_reg)-1]='\0';

	//打开文件
	if((wfp=fopen("./usr.txt","a+"))==NULL)
	{
		perror("fopen error!");
		return -1;
	}
	
	//将注册账号和注册密码写入到文件中,中间用空格隔开,每组用换行隔开
	fprintf(wfp,"%s %s\n",account_reg,pwd_reg);

	fclose(wfp);

	printf("register succsee!");
	return 0;
}

int do_login()     //登录
{
	//存放登录账号密码
	char account_login[20];
	char pwd_login[20];

	char account[20];
	char pwd[20];

	printf("please enter account_login:");
	fgets(account_login,sizeof(account_login),stdin);
	printf("please enter pwd_login:");
	fgets(pwd_login,sizeof(pwd_login),stdin);

	account_login[strlen(account_login)-1]='\0';
	pwd_login[strlen(pwd_login)-1]='\0';
	
	FILE *rfp=0;
	if((rfp=fopen("./usr.txt","r"))==NULL)
	{
		perror("fopen error!");
		return -1;
	}
	//循环遍历账户
	while(1)
	{
		int res =fscanf(rfp,"%s %s",account,pwd);
		if(res < 0)
		{
			puts("log in error");
			fclose(rfp);
			return 1;
		}
		if(strcmp(account,account_login)==0 && strcmp(pwd_login,pwd)==0)
		{
			puts("log in success!");
			fclose(rfp);
			return 0;
		}
	}

}


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

	//制作菜单框架
	while(1)
	{
		printf("\t\t====1.register====\n");
		printf("\t\t====2.Log in====\n");
		printf("\t\t====0.exit====\n");
		
		printf("Please enter function options:");
		scanf("%c",&menu);
		while(getchar() != '\n');

		//对菜单选项多分支选择
		switch(menu)
		{
			case '1':
				{
					do_register();
				}
				break;
			case '2':
				{
					do_login();
				}
				break;
			case '0':
					exit(1);
			default:
				{
					printf("enter error!!!");
				}
		}
		printf("Enter any key to clear the screen:");
		while(getchar() != '\n');
		system("clear");
	}
	return 0;
}

运行结果

嵌入式学习-IO进程线程-Day2_第3张图片

3、完成图像文件信息的读写操作

代码
#include
int main(int argc, const char *argv[])
{
    //定义文件指针打开文件
    FILE *fp = NULL;
    if((fp = fopen("./1.bmp", "r+")) == NULL)
    {
        perror("fopen error");
        return -1;
    }
    
    //更改像素
    unsigned char color[3] = {255, 0, 0};    //纯蓝色

    //将光标偏移到图像数据处
    fseek(fp, 54, SEEK_SET);
     
    for(int i=0; i<100; i++)   //外行
    {
        for(int j=0; j<720; j++)   //内列
        {
            fwrite(color, sizeof(color), 1, fp);
        }
    }
    //关闭文件
    fclose(fp);
    return 0;
}

运行结果
嵌入式学习-IO进程线程-Day2_第4张图片

面试题整理

嵌入式学习-IO进程线程-Day2_第5张图片
嵌入式学习-IO进程线程-Day2_第6张图片

你可能感兴趣的:(嵌入式学习,学习)