0
fd_set read_fds;
struct timeval tv;
while(1){
tv.tv_sec = 3;
tv.tv_usec = 0;
FD_ZERO(&read_fds);
FD_SET(0,&read_fds);
FD_SET(pipelogin,&read_fds);
nfd = select(1,&read_fds,NULL,NULL,&tv);
if(FD_ISSET(0,&read_fds)){
printf("Comando"); }
//comandos();
if(FD_ISSET(pipelogin,&read_fds)){
printf("Login"); }
//VerificaLogin(pipelogin);
}
私の関数 "comandos()"はユーザーからのコマンドを読み込んで何かをし、VerificaLogin(pipelogin)の機能を実行するだけでユーザーのログインを許可します。私はユーザー "comando"を一度しか使えず、VerificaLoginは最初の "comando"の後でしか動かないのです...誰かがここで何が間違っているのか教えてくれますか? 悪い英語で申し訳ありません。選択しないUnix C
'select'の最初のパラメータは、少なくとも1にセットの最大ファイル記述子を加えた値にする必要があります。 '0'と' pipelogin'の2つのファイル記述子しか持たないので、 'pipelogin'はその集合の最大ファイル記述子になりますので、最初のパラメータを' pipelogin + 1'に設定します: 'nfd = –
@IanAbbott) [poll(2)](http://man7.org/linux/man-pages/man2/poll.2.html)を古くから廃止された 'select'に追加し、最後に' \ n'を入れます'printf'フォーマット文字列の' fflush'を使ってください。 –
問題の最小限の実行可能なデモンストレーションを提供してください([mcve]を参照してください)。 – ikegami