当前位置: 技术问答>linux和unix
在linux下如何用c实现类似于Linux登陆时输入密码的场景: 即输入密码时不在屏幕上显示所输入的内容
来源: 互联网 发布时间:2015-11-05
本文导语: 在linux下如何用c实现类似于Linux登陆时输入密码的场景: 即输入密码时不在屏幕上显示所输入的 内容, 或者以"*"号代替显示. | getpass就是用设置终端的方法实现的。因为使用getpass有风险,所以建议...
在linux下如何用c实现类似于Linux登陆时输入密码的场景: 即输入密码时不在屏幕上显示所输入的
内容, 或者以"*"号代替显示.
|
getpass就是用设置终端的方法实现的。因为使用getpass有风险,所以建议程序员根据自己的需要自己完成。在GNU的C库文档里有实现例子,拷贝到这里,也回答你对终端的问题
#include
#include
ssize_t
my_getpass (char **lineptr, size_t *n, FILE *stream)
{
struct termios old, new;
int nread;
/* Turn echoing off and fail if we can't. */
if (tcgetattr (fileno (stream), &old) != 0)
return -1;
new = old;
new.c_lflag &= ~ECHO;
if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
return -1;
/* Read the password. */
nread = getline (lineptr, n, stream);
/* Restore terminal. */
(void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
return nread;
}
#include
#include
ssize_t
my_getpass (char **lineptr, size_t *n, FILE *stream)
{
struct termios old, new;
int nread;
/* Turn echoing off and fail if we can't. */
if (tcgetattr (fileno (stream), &old) != 0)
return -1;
new = old;
new.c_lflag &= ~ECHO;
if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
return -1;
/* Read the password. */
nread = getline (lineptr, n, stream);
/* Restore terminal. */
(void) tcsetattr (fileno (stream), TCSAFLUSH, &old);
return nread;
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。