Linux C 实现密码的密文输入,*输出,可删除

window情况下可以使用getch()函数(不回显),然后再用printf或是putchar函数输出*用以模仿输入*

但由于该函数包含在 头文件下,而在linux、Unix环境下往往不包含此头文件

这里可以考虑使用函数

getpass("")

来实现无回显输入

举例

while(ch_password= '\n')  //无回显,然后将getpass返回的数组函数复制到自己的密码数组中
{
	 ch_password=getpass("Input a password");
	 strcpy(msg.password,ch_password);
		
}

但不会输出*,也无法删除

 如果想以***代替密码,并且具有删除功能怎么办呢

这里再介绍两个linux 系统函数

 

system("stty -icanon");                   //设置一次性读完操作,即getchar()不用回车也能获取字符
system("stty -echo");                     //关闭回显,即输入任何字符都不显示

 那么上述功能便容易实现了

void handle_password(char *password) //一维数组指针
{
	int i=0;
	system("stty -icanon"); //设置一次性读完操作,即getchar()不用回车也能获取字符
	system("stty -echo");   //关闭回显,即输入任何字符都不显示

	while(i < 20)  //20假设密码长度不超过20
	{
		password[i]=getchar();                    //获取键盘的值到数组中
		if(i == 0 && password[i] == BACKSPACE)
		{
			i=0;                           //空密码情况
			pass[i]='\0';
			continue;
		}
		else if(password[i] == BACKSPACE)
		{
			printf("\b \b");            //删除情况,光标前移
			password[i]='\0';
			i=i-1;                    //返回到前一个值继续输入
			continue;                 //结束当前循环
		}
		else if(password[i] == '\n')          //回车键结束
		{
			password[i]='\0';
			break;
		}
		else
		{
			printf("*");
		}
		i++;
	}

	system("stty echo");               //开启回显
	system("stty icanon");           //关闭一次性读完操作
	
}

 

你可能感兴趣的:(c,工程实习)