私はCに完全に不慣れです...まあ一種。私はC++を知っています。割り当てのためにマルチ脅威プログラムを実行しようとしていますが、要件の1つは、ユーザーにコマンドプロンプトでコマンドを入力させることでした。基本的に私が求めているのは、int mainを設定して、コマンドプロンプトから常に入力を停止せずに取得できるようにする方法(新しいスレッドを開始できるようにする方法)、およびユーザーが'Eを押した場合などの比較を行う方法です。 'これを実行します。彼がFキーを押すと、これを実行します。ユーザーが入力するコマンドの数がわからないため、argcはまったく問題ではないと思います。これについて続けるための最良の方法は何でしょうか
4 に答える
プログラムが開始されると、コマンドライン引数が渡されint main(int argc, char **argv)
、これらは変更されません (プログラムが変更しない限り)。
その後、プログラムは標準入力から読み取り、E
「これを行う」やF
「あれを行う」などのコマンドを取得できます。別の方法で動作させるためにプラットフォーム固有の手順を実行しない限り、ユーザーがコマンドを入力した後にリターン キーを押すまで、入力はプログラムに提供されません。
そのため、コマンド ライン引数が提供されている場合は、それを処理できます。それが完了したら、対話型になり、ユーザーからのさらなる入力を待つことができます。
マルチスレッドはこれとはほとんど関係ありません。ユーザーから読み取るにはおそらく単一のスレッドが必要ですが (そうしないと、誰かまたは何かが混乱することになります)、それ以外の場合、スレッド間の通信はまったく別の問題です。
マスター スレッドに I/O を任せます。
マスター スレッドからの入力を求めるプロンプトをユーザーに出力します。
ユーザー入力をマスター スレッドからワーカー スレッドに渡します。
繰り返す。
ユーザー インターフェイス スレッド:
void *trd_func(void *p) {
while (1) {
int c = getchar();
switch(c) {
case 'E':
set_some_flag('E');
break;
default: break;
}
}
return 0;
}
やりたいことをやって本気で学びたいなら、
ファイル ストリームと ttys/canonical 入力に関する情報を探し始める必要があります。
そして、これがどのように機能するかを理解したら、read() 関数を使用して、ユーザーとやり取りしたいことを何でも実行できるようになります (シェルを実行することさえできます)。
I/O ファイル ストリームについて多くの興味深いことを学んだことを保証します。
しかし、前述のように、getchar() も使用できます。