[Powered by Google Translate] トミー：このビデオでは、私たちは学びます
リダイレクトとパイプ。
これまでのところ、我々へのprintfのような関数を使用してきた
出力端子へのデータとGetStringのような機能
ユーザーが当社への入力を提供できるようにする
キーボードを使用しているプログラム。
迅速の行を取得したプログラムを見てみましょう
ユーザからの入力をして、それを出力します。
>> 7行目では、文字列を入力するようユーザーに求めている、と
次に、8行目で、私たちは裏にそれを印刷している。
我々のプログラムをコンパイルして実行してみましょう。
グレート。
我々は与えられた文字列がエコーバックされました
端末での私たちに。
printf関数に書いたので、これは何が起こっ
ストリームは、標準出力と呼ばれる、またはS-T-D-OUT。
何かがstdoutに書き込まれている場合、デフォルトではだ
端末によって表示される。
>> だから、すべてが順調と良いことだが、単に何の代わりに、場合
文字列を表示する、我々はそれをファイルに保存したいですか？
例えば、私たちは覚えておきたいかもしれません、まさに私たちの
我々は、後でそれに特定の入力を与えたときにプログラムがなかった。
一つのアプローチは、使用して、私達のCプログラムでこれを行うことであろう
我々はよそのファイルへの書き込みのためにいくつかの特別な機能
別のビデオで見る。
さらに簡単に、しかし、何とかになる
stdoutをファイルにリダイレクトします。
そうすれば、printfの標準出力（stdout）に書き込むときに、内容が意志
のではなくファイルに書き込まれる
端末によって表示される。
私たちは、大なり記号を追加することにより、続いてちょうどそれを行うことができます
ファイル名によって、コマンドに我々のプログラムを実行するために使用します。
>> そうではなく、単に実行する。/リダイレクト、我々は、することができます
続いて、不等号、続いて実行する。/リダイレクト
file.txtのようにファイル名、。
何が起こるか見てみましょう。
[OK]をクリックします。
この時間は、何も端末に表示されていないことに注意してください、
しかし、我々は我々の内容を変更していない
すべてのCプログラム。
今lsでこのディレクトリの内容を調べてみましょう。
>> かしこまりました。
今、私たちのディレクトリに新しいファイルがfile.txtを呼んでいる、
それは私達が私達を実行したときに我々は与えられたファイル名です
プログラムをリダイレクトします。
file.txtのを開きましょう。
そしてここで、我々は、リダイレクトのうち、stdoutがあったことがわかります
file.txtを呼ばれるファイルに書き込まれます。
それでは、上記のコマンドをもう一度実行してみましょうが、供給
異なる入力この時間。
オーケー。
それでは、file.txtを見てみましょう。
>> 我々は、ファイルが上書きされたことをここに見ることができるので、私たちの
元の入力はもうありません。
我々は、代わりにこのファイルに追加したい場合は、新しいを置く
ファイルの既存の内容を以下に入力、私たちすることができます
ただ1つではなく2つの大なり記号を使用します。
ことを試してみましょう。
我々は再びfile.txtを開いた場合、今、私達は私達の両方を見ることができます
入力ライン。
いくつかのケースでは、我々はすべてを破棄したい場合があり
私たちのプログラムの出力。
むしろ、出力をファイルに書き込み、その後削除するよりも
我々はそれを行っているファイルは、我々は特別に書き込むことができます
ファイルは/ dev / nullと呼ばれる。
何が/に書き込まれたときにdev/null--
または略して単にdevnull -
それは自動的に破棄されます。
だからあなたのデータのためのブラックホールとしてdevnull考える。
>> だから今我々はより大きい符号がリダイレクトする方法を見てきました
標準出力（stdout）、我々は標準的なリダイレクトする方法を見てみましょう -
またはS-T-D-IN -
stdoutのアナログ。
関数はprintfというストリームに書き込みたいとしながら
ストリームから読み込まれた標準出力（stdout）、GetStringメソッドと同様の機能
デフォルトでは、ストリームである、と呼ばれる標準入力、
文字はキーボードで入力。
我々は、不等号を使ってstdinをリダイレクトすることができ、続いて
ファイル名による。
今すぐではなく、少なくともユーザーに入力を促す
ターミナル、我々は指定されたファイルを開いて使用するプログラム
入力としてのライン。
>> 何が起こるか見てみましょう。
グレート。
file.txtの最初の行が端末に表示されています
私たちは、かつてGetStringメソッドを呼び出しているためです。
我々は我々のプログラムでGetStringメソッドに別の電話があった場合は、
file.txtの次の行は次のように使用されていた
その呼び出しへの入力。
再び、我々はすべて弊社のC言語のプログラムを変更していない。
私たちは私たちがそれを実行する方法を変更している。
そしてまた、我々は標準出力（stdout）、この時間をリダイレクトしていない、覚えている
ので、プログラムの出力はまだあった
端末に表示。
我々は、もちろん、両方stdinをリダイレクトすることができます
このようなとstdout。
さて、file2.txtはfile.txtの最初の行が含まれています。
>> だから、これらの演算子を使用して、私たちを読むことができましたし、
テキストフ​​ァイルからの書き込み。
今、私たちは1つのプログラムの出力を使用する方法を見てみましょう
他のプログラムに入力する。
そこでここでは別の簡単なCのプログラム私はだ
ここでは、hello.cと呼ばれています。
あなたが見ることができるように、これは単にこんにちは "を出力
そこに！ "ユーザーに設定されます。
- 私は、入力としてハローの出力を使用するようにリダイレクトしたい場合
別のプログラム -
私は最初に呼ばれるファイルに挨拶のstdoutをリダイレクトすることができ
input.txt、その同じにリダイレクトのstdinをリダイレクト
ファイル - input.txt。
だから私は行うことができます。/ hello>というinput.txt。
これを実行するには、Enterを押します。
続いて。/リダイレクト<
input.txt、そしてことを実行してください。
だから我々はできセミコロンでこのビットを、短縮することができます
私たちは、同じ回線上の2つ以上のコマンドを実行します。
だから私は、と言うことができます。/ hello>というinput.txt、セミコロン、
。/ <input.txtをリダイレクトします。
>> この作品は、だから、それはまだかなり洗練されてないと感じている。
私が言いたいのは、我々は本当にだ、この中間テキストフ​​ァイルが必要なのでしょうか
実行をリダイレクトした後、もはや必要？
幸いにも、我々は何を使用して、この余分なテキストフ​​ァイルを回避することができます
パイプと呼ばれる。
私はと言えば、HELLO / |。。/次に、のstdoutをリダイレクト
左のプログラム -
このケースでは、ハロー -
の標準入力として使用されます
右側のプログラム。
この場合、リダイレクトされます。だから、これを実行してみましょう。
>> そうしよう。
我々は、helloの出力を入力として使用されていたことがわかります
リダイレクト用。
一緒にコマンドをひもでパイプを使用することにより、我々は何を形成
私達の出力は基本的に動いているので、パイプラインと呼ばれる
一連のコマンドを介して。
パイプを使用して、我々は必要とせずに、いくつかのクールなものを行うことができます
まったくコードを記述します。
例えば、使用している私たちはどのように多くのファイルを知りたいとしましょう
このディレクトリ内の。
パイプを使用して、我々は、wc lsコマンドを組み合わせることができます -
または語数 -
コマンド。
lsは標準出力（stdout）にディレクトリ内の各ファイルを出力し、
wcは標準入力を介してそれに与えられた行数を教えてくれる。
だから、私たちが言うならLS |トイレ - l -
行数をカウントするためにそれを伝えるためにトイレに-lフラグを供給 -
我々は正確にどのように多くのファイルを見ることができます
現在のディレクトリにあります。
>> それでは、もう一つの例を見てみましょう。
私は、ここにstudents.txtと呼ばれるファイルを持っている
名前のリストを持つ。
ただし、これらの名前は、どのような順序ですべてではありません、それが見える
のようにいくつかの名前が繰り返される。
我々が欲しいのはアルファベット順に一意の名前のリストです。
final.txtと呼ばれるファイルに保存された注文、。
我々は、もちろん、私たちのためにこれを行うには、Cプログラムを書くことができます。
しかし、それは不必要に得るために起こっている
かなり迅速に複雑。
代わりに解決するために、パイプやいくつかのビルトイン·ツールを使用してみましょう
この問題。
>> 我々が最初にやるべきことは、ファイルstudents.txtを読んだ。
catコマンドは、ちょうどそれを行います。
これは、指定されたファイルに読み取りおよび書き込みを実行します
stdoutにその内容が表示されます。
我々は、テキストフ​​ァイルを読んだ後、私たちはよ
名前をソートしたい。
sortコマンドは、私たちのためにこれを扱うことができます。
並べ替えは、stdoutにstdinを介して供給ラインを出力します
ソートされた順序インチ
にstudents.txtの内容を供給するために、
ソートのstdin、私たちは猫とソートを組み合わせるためにパイプを使用することができます。
ソートと|だから私は猫students.txtを実行することができます
Enterキーを押します。
そして今、私たちはstudents.txtの内容を参照して
アルファベット順。
>> それでは、別のコマンドを追加してみましょう -
uniqの、または一意 -
当社のパイプラインへ。
あなたは、uniqを推察のように、時のソートされた順序を供給
STDINを経由して行は、ユニークな行を出力します。
だから今我々は猫students.txtを持っている
|ソート| uniqの。
最後に、我々は、パイプラインの出力を保存することができます
ソート| | uniqは猫students.txt経由でのファイルの
> final.txt。
我々はfinal.txtを開くので、もし、私たちがいたかを正確に持っている
探している：
アルファベット順に一意の名前のリスト、
テキストフ​​ァイルに保存。
ところで、私達はまた言ったかもしれないソート<
students.txt | uniqは> final.txtかを正確に
我々が見てきた事業者のそれぞれを使用して同じこと、
このビデオ。
>> 私の名前はトミーであり、これはCS50です。