アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、SolarisでC言語の簡単なアプリケーションを作成しています。
そこで、管理者以外の人に悪用されないようにという名目で、作ったプログラムを端末エミュレータで起動させ、それに標準入力からパスワードを入力させるようにしたいと考えています。
しかし、そのためには、入力したパスワードをターミナル上に表示されては困るので、ターミナルに入力された文字列を表示させないようにするにはどうしたらよいのでしょうか?
いろいろと調べたのですが、具体的な関数がよくわからなかったので、エコーバックをなくすような関数がありましたら、是非教えてただきたいと思います。

A 回答 (4件)

このソースを試してみてください。


ヒントになるでしょう。
Enterキー入力後にエコーバックします。
キーワードはsttyコマンドです。
----
#include <stdio.h>
main()
{
char bf[1000];
memset(bf, NULL, 1000);
printf("PASSWD:");
system("stty -echo >/dev/null 2>&1");
scanf("%s", bf);
system("stty echo >/dev/null 2>&1");
printf("\nエコーバック=>%s\n",bf);
}

この回答への補足

お答えありがとうございます!
しかし、system関数を使わずに、C言語の関数(ライブラリを含む)ですることはできるのでしょうか?

補足日時:2003/07/23 13:28
    • good
    • 1

ioctlってシステムコール使えばやれると思いますよ。


Linuxではやったことありますが、多分Solaris(Unix)でも
いけたはず・・・
ioctlの使い方はmanでも見て下さい。
    • good
    • 0

結構、面倒です。

覚悟してください。入出力がファイルにリダイレクトされている場合の処置とか、途中でCtrl+Cを押された場合の始末とか、諸々を付け加えると100ステップを超えてしまうかもしれません。

#include <termio.h>
struct termio tbuf;
char passowrd [100];
ioctl (0, TCGETA, &tbuf);
tbuf.c_lflag &= ~ECHO;
ioctl (0, TCSETA, &tbuf);
fputs ("password: ", stdout);
fgets (password, stdin);
tbuf.c_lflag |= ECHO;
ioctl (0,TCSETA, &tbuf);
    • good
    • 0

パスワード入力のプロンプトになったら、標準出力を


close()してしまえば、画面には出力されなくなると
思いますが、だめでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!