linux下write,read,strcmp函数实现简单的shell终端密码登录程序

设计要求:
1…系统默认已经设置两种密码(root用户密码:123456,用户密码:345678),两个密码都可以进行解锁。
2.解锁后可进入系统,进入系统后,可以更改用户密码。root密码是不可以更改。更改后的密码保存在文件当中下一次进入系统,则输入的用户密码为上次更改的密码。

大概思路:
1.root不可改,所以定义数组
2.Linux下皆文件,将用户密码写入自定义的密码文件中(psw.txt)
3.使用read读文件,但是有些时候密码文件的光标不一定在末尾,所以使用lseek将光标设置到文件末尾
4.将读到的buff,定义的root密码数组和在shell输入的字符串进行比较(strcmp)
5.将密码文件清空,将输入的字符串写入密码文件中

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define FILE1 	"/mnt/hgfs/share/week10/psw.txt" //宏定义文件路径(自己定义)

int main (int argc,char *argv[]){
	
	int file_fd1,len;
	char arr1[] = "123456";//root用户密码不可以更改	
	char in1[10]="";
	
	file_fd1 = open(FILE1, O_RDWR|O_CREAT,0777);//打开密码文件
	if(-1 == file_fd1)
	{
		printf("file_fd1 open failure\n");
		return -1;
	}
	
	len=lseek(file_fd1,0,SEEK_END);//将文件光标设置在文件末尾,获取源文件大小
	char buff[len]; 
	lseek(file_fd1,0,SEEK_SET);//将文件光标设置在文件开头,便读取
	read(file_fd1,buff,len);//读文件,主要读出buf
	close(file_fd1);	
	
	
	printf("请输入用户登录密码(root用户密码):");
	scanf("%s",*argv);
	
	if( strcmp(*argv, arr1) == 0 | strcmp(*argv, buff) == 0 )//比较字符串
	{
		printf("登录系统成功\n");	
		printf("请输入修改用户密码:");
		scanf("%s",in1);
		file_fd1 = open(FILE1, O_RDWR|O_TRUNC);//打开并清空文件
		write(file_fd1,in1 ,strlen(in1));//写入刚修改的密码
		close(file_fd1);
		printf("密码修改成功\n");	
						
	}else{
		printf("登录系统失败\n");	
	}	
	return 0;
}

	


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>