OSやシェルに詳しい方に質問です。
command < file
のように実行する場合を考えたときに、'<'によって標準入力がfileへリダイレクトされていると認識してました。つまり、C言語で表すなら以下のようなプログラムで実装されていると考えておりました。
close(STDIN_FILENO);
int fd = open(file,O_RDONLY);
dup(fd);
しかし、この実装ではキーボードからの入力が受け取れないのではないかと疑問に感じました。
例えばmoreコマンドを実行する場合を考えると
more -10 < file
fileの中身が10桁ずつ表示されます。しかし、標準入力からの入力('q'やEnter)も受けとることができます。'<'のアルゴリズムがどうなっているのか教えていただきたいです。
pipeシステムコールを利用すれば実装できる気もするのですが、実際にどのようにプログラムすればいいのかがわからないです、、、。
よろしくお願いします!
No.4ベストアンサー
- 回答日時:
常に端末から読みたいのなら、
FILE *f;
して、あとはOSにより、
WIndows:
f = fopen("CON","r");
Unix/Lnux:
f = fopen("/dev/tty","r");
と端末を読み取りオープンして、そこから読めば良いです。
No.3
- 回答日時:
No.2 のリンク先に
/* Read a number and command from the terminal. Set cmd to the non-digit
* which terminates the number. */
static struct number_command read_command(struct more_control *ctl)
{
cc_t input[8] = { 0 };
ssize_t i, ilen;
struct number_command cmd = { .key = more_kc_unknown_command };
/* See stderr note in read_user_input() */
if ((ilen = read(STDERR_FILENO, &input, sizeof(input))) <= 0)
return cmd;
if (2 < ilen) {
...ってありますね。
要するに、キーボード入力は stderr から受け取っているらしい。
No.2
- 回答日時:
>実際にどのようにプログラムすればいいのかがわからないです、、、。
実際のところこんな感じじゃないですか?読んでないけど。
https://github.com/util-linux/util-linux/blob/ma …
No.1
- 回答日時:
標準入力はどのアプリケーションで使用しても標準入力として機能します。
標準出力はどのアプリケーションで使用しても標準出力として機能します。
それ以上でも以下でもありません。
OSが提供している機能ですので。
リダイレクト(リダイレクション)はリダイレクト(リダイレクション)として機能します。
それ以上でも以下でもありません。
OSが提供している機能ですので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# double型が正常に認識されていない恐れ 5 2024/03/10 21:10
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
とっておきの手土産を教えて
お呼ばれの時や、ちょっとした頂き物のお礼にと何かと必要なのに 自分のセレクトだとついマンネリ化してしまう手土産。 ¥5,000以内で手土産を用意するとしたらあなたは何を用意しますか??
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
逆コンパイルと逆アセンブルの違いはなんですか
C言語・C++・C#
-
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
C言語について。
C言語・C++・C#
-
-
4
これて逆じゃないですか?
C言語・C++・C#
-
5
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
6
今ってプログラミング言語は何が中心?
C言語・C++・C#
-
7
プログラム言語について c言語もコードによって機械語に通訳されると知りました。直接機械が通訳しなくて
C言語・C++・C#
-
8
10進数からN進数に変換するプログラミング(C言語)
C言語・C++・C#
-
9
こんなことてしますか??
C言語・C++・C#
-
10
C言語について。
C言語・C++・C#
-
11
プログラミング言語についてc++に空白あると同じ文字を再度繰り返して処理しないといけないので2倍動作
C言語・C++・C#
-
12
Linux Cプログラミングを学ぶための書籍
C言語・C++・C#
-
13
c言語のリダイレクトによる円の描画について
C言語・C++・C#
-
14
どうして+3
C言語・C++・C#
-
15
パソコン
C言語・C++・C#
-
16
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
17
c言語
C言語・C++・C#
-
18
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
19
だれがとけるの?
C言語・C++・C#
-
20
どちのほうがすきですか?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
C言語について質問です。 0以下...
-
*をユーザーが入力した数字の数...
-
Excel VBAで、Application.Inpu...
-
scanfが2回使えない・・・?;
-
数字以外が入力されたらエラー...
-
VB.NETで16進数+16進数や16進...
-
cout関数を使っているのですが...
-
getchar()について 教えてくだ...
-
batプログラム上で文字列を入力...
-
コンソールアプリの入力時に改...
-
コンボボックスで日本語入力を...
-
C++のcinの動作
-
C言語scanf_sで何故か2回入力に...
-
プログラムの進行が一時ストッ...
-
C言語初心者です。ファイルの読...
-
プログラミングC言語について
-
漢字のソートについて
-
C言語 逆ピラミッドの作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
java初心者です。入力されたの...
-
Excel VBAで、Application.Inpu...
-
ワードで文字を入力する時の変...
-
WindowsでEOF
-
batプログラム上で文字列を入力...
-
getchar()について 教えてくだ...
-
cout関数を使っているのですが...
-
コマンドプロンプトからのEOFの...
-
"scanf"でエンターで改行させな...
-
VisualStudio2019のコードアナ...
-
C言語scanf_sで何故か2回入力に...
-
至急教えてください!プログラ...
-
scanf が無視されます
-
EDITコントロールで入力できる...
おすすめ情報