質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

751閲覧

[linux] プログラムの実行と引数について

torimingo

総合スコア122

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2019/03/23 11:05

編集2019/03/23 23:18

linuxのコンソールで、実行ファイルの後ろに引数のようなものをくっつけて実行するような記述が、参考書(Linuxシステムコールプログラミング(技術評論社)の134ページ)に載っていたのですが、引数が何を意味しているのかよくわかりません。
以下に示します。

./test 4<&0

4<&0とはなんでしょう?
googleで調べても、よくわかりませんでした。
ちなみに、testは、select()を使って、ファイル記述子0と4の変更を待つプログラムです。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2019/03/23 11:38

参照した参考書の該当箇所を明記してください。書籍なら著者名、標題、出版社 (できればページ番号も)。ウェブページならURL。質問文に追記していただけますか。
torimingo

2019/03/23 23:20

書籍の情報を追加いたしましたので、ご確認のほど、お願い致します。著者名を書くのは、なんとなく憚られましたのでご了承下さい。
ikedas

2019/03/24 08:28 編集

書店で探してみます。というか、出版物というのは「この人がこういうものを書きました」ということを公開することにほかならないので、その情報を他人が共有することはまったく問題ないです。ブログの記事にリンクはるのと同じ。今後は是非、参考にした資料を明記してほしいです。
ikedas

2019/03/24 08:24

同著者の 山森丈範『Linuxシステムコール基本リファレンス』(技術評論社) を入手しました。148-149ページにおそらく同じ内容と思われるソースコードと解説がのっていました (なかなかよさそうな内容ですね)。otn さんの回答に全面同意なのでわたしは今回回答しません。
guest

回答1

0

ベストアンサー

4<&0は引数ではありません。シェルのリダイレクト指定です。

シェルが、プログラム起動前に4<&0を解釈して、リダイレクトを行ってから、プログラムを起動します。プログラムには渡りません。

4は、プログラムのファイル記述子4を表します。&0はこのコマンド実行前時点での標準入力(記述子0)を表します。
4<&0という指定で、プログラムが記述子4から読もうとすると、コマンド実行前時点の記述子0から読むようになります。
プログラムが記述子0については、何のリダイレクト指定も無いので、同じくコマンド実行前時点の記述子0から読むようになります。

投稿2019/03/23 12:10

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/03/23 12:12

このあたりは、man bash のリダイレクトのセクションに詳しく載っています。
pepperleaf

2019/03/23 12:30

これ、Bash専用? csh系もありでした? 横道、それて申し訳ないですが、、、。
otn

2019/03/23 12:43

sh bash ksh zsh など。 csh系は記述子を指定してのリダイレクトは出来ません。sh系に比べて機能が貧弱です。
pepperleaf

2019/03/23 12:45

> sh bash ksh zsh など。 ありがとうございます。born-shell系ですね。 昔は、csh系の方が機能豊富だったのですが、、、。 (もっとも使いこなせてなかった)
otn

2019/03/23 13:18

コマンドラインでの機能は sh より csh が上でしたが、スクリプトになるとcsh系は全然です。 昔のshは、ヒストリーとかエイリアスとか関数も無かったので。
torimingo

2019/03/23 23:16

ご回答をありがとうございました。 自分なりに、がんばって解釈してみたのですが、以下の内容で正しいでしょうか?  ・キーボードの出力は、記述子0の入力につながっている  ・キーボードの出力は、記述子4の入力につながっていない  ・記述子0の出力は、testの入力、および、記述子4の入力につながっている  ・記述子4の出力は、testの入力につながっている
otn

2019/03/24 00:51

「キーボードからの入力」 「testの記述子0の入力」 「testの記述子4の入力」 という言葉を使って書き直してみてください。
torimingo

2019/03/24 07:03

うまく言葉で説明できそうにありませんでしたので、図にしてみました。 以下のURLをご参照ください。 https://d.kuku.lu/589a02bf98 根本的に、何かが間違っていたら、ご指摘頂けると幸いです。 お時間をお掛けして申し訳ございません・・。
otn

2019/03/24 07:26

根本的に間違っています。 ファイル記述子は、プログラムの外でなく、中にあるものです。
otn

2019/03/24 07:50

キーボードからの線は、fd0を経由せず、直接fd4につながります。
torimingo

2019/03/24 08:03

なんとなく、イメージがつかめました。 教えて頂き、ありがとうございます。
otn

2019/03/24 08:34

4<&0 で、キーボードからfd0に延びている線をコピーして、キーボードとfd4の間をつなぐ という意味です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問