今天我是在作弄我的东西,在某些时候,我需要getpass函数时,一切都还OK,以及至少直到我用--std = C11我得到:为getpass函数时更好的选择
error: implicit declaration of function ‘getpass’ [-Werror=implicit-function-declaration]|
在互联网上我发现这个功能被认为是过时:
The getpass() function is not threadsafe because it manipulates global signal state.
The getpass() function is scheduled to be withdrawn from a future version of the X/Open CAE Specification.
所以我不能用它,至少不是如果我编译--std = c11。
我尝试的程序是这样的:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main(void){
char checkPasswd[BUFSIZ] = "iajsdiajsda32121312asda:ubuntu";
char *checkName = "michi";
char name[25];
char *passwd;
char *delimiter;
printf("Login Name:\t");
scanf("%24s" ,name);
delimiter = strchr(checkPasswd, ':');
delimiter[0] = '\0';
delimiter++;
passwd = getpass("Give a passwd:\t");
if(strcmp(name,checkName) == 0){
if(strcmp(passwd,delimiter) == 0){
printf("Logged In\n\n");
}else{
printf("\t\t\tWrong Password\n");
exit(1);
}
}else{
printf("\t\t\tWrong Name\n");
exit(1);
}
printf("\t\t\tWelcome %s\n\n", name);
return 0;
}
我读的东西在这里== >>Getting a password in C without using getpass (3)?并且也有一些答案,但我不知道是否有上午简单的方法之前,我尝试了我在那里发现,类似于:
passwd = getpass("Give a passwd:\t");
或者我要创建我的自我?
这个程序没有做什么,我需要:
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
int main(void){
struct termios oflags, nflags;
char password[64];
tcgetattr(fileno(stdin), &oflags);
nflags = oflags;
nflags.c_lflag &= ~ECHO;
nflags.c_lflag |= ECHONL;
if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
perror("tcsetattr");
return EXIT_FAILURE;
}
printf("password: ");
fgets(password, sizeof(password), stdin);
password[strlen(password) - 1] = 0;
printf("you typed '%s'\n", password);
if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
perror("tcsetattr");
return EXIT_FAILURE;
}
return 0;
}
所以现在的问题是,我必须把它写我自己或者有一个复用功能?
你从哪里得到的#include''?这不是关于链接问题的接受答案。 –
ecatmur
[在不使用getpass的情况下在C中获取密码?](http://stackoverflow.com/questions/1196418/getting-a-password-in-c-without-using-getpass-3) – Olaf
@olaf我刚刚在我的问题中提出了这个链接,我需要别的东西,否则我必须自己写。 – Michi