ファイルと標準入出力

ファイルと標準入出力
1. ファイル、ディレクトリの概念とプロセス
との関係を理解する
2. 標準入出力の概念を理解する
ファイル
• ファイルはデータが直線的に並んだもの
Abcd0123$%##18ls.…..
• Cのソースファイル、実行ファイルもファイル
od –c [ソースファイル名]
• 実際に改行を行うのは端末プログラムの機能
ファイル内容の表示
エディタでもできるが…
% cat [ファイル名]
% less [ファイル名]
• スペースキーで次ページ
•
b で戻る
•
q で終了
ディレクトリ
• すべてのファイルはどれかのディレクトリ(あるい
はフォルダ)に属している
• ディレクトリ内にディレクトリを設けることもできる
→ ディレクトリは階層的になっている
ディレクトリツリー
一番上の “/” をルートディレクトリという
/
usr
home
etc
上位のディレクトリを親
ディレクトリという
eng
作業ディレクトリ
• プロセスはそれぞれ、どれかのディレクトリ上で動作
している。このようなディレクトリを作業ディレクトリあ
るいはカレント(ワーキング)ディレクトリという
% pwd ← print working directory の略
• 特に指定しなければ、ファイルの閲覧、作成は作業
ディレクトリ中のファイルに対して行われる
• 作業ディレクトリはプロセスごとに異なってもよい
• ls を実行すると作業ディレクトリにあるファイルの一
覧が表示される
• ログインしたときの作業ディレクトリは各自の
ホームディレクトリ
• 作業ディレクトリを変更するには cd を実行す
る
% cd /etc
% pwd
• “..” (ピリオド2つ)は親ディレクトリ、“.” (ピリ
オド1つ)は現在の作業ディレクトリをあらわす
% cd ..
• 引数なしで cd を実行するとホームディレクトリ
に移動する
ファイルの指定
作業ディレクトリ以外のディレクトリにあるファイルを指
定するには…
• 一番上からたどって名前を指定する
→ 絶対パス名、例 /usr/include/stdio.h
% less /usr/include/stdio.h
• 現在のディレクトリからたどる名前を指定する
→ 相対パス名、例 ../../ファイル名
(Windows では / ではなく ¥ が用いられる)
プロセスの入出力
プロセスはキーボードからデータを入力し、端末に
表示する(出力する)ことができる
scanf
printf
プロセス
キーボード
端末
本当はこうなっている
キーボード
端末
プロセス
scanf
printf
• キーボード、端末に直結されているわけではない
• それぞれにファイルを接続することもできる
キーボード
端末
プロセス
ファイル1
ファイル2
• このような切換をリダイレクトという
• リダイレクトは入力のみ、あるいは出力のみで行う
ことも可能
出力のリダイレクト
コマンドの後に “> ファイル名” をつける
% cat /etc/hosts
% cat /etc/hosts > file1
% cat file1
画面に表示されていた内容が file1 に書き込まれる
入力のリダイレクト
コマンドの後に “< ファイル名” をつける
% cat
← キーボードから入力する
← Ctrl-D を入力すると終了する
(引数なしで実行されたとき、cat はキーボードから
入力されたデータをそのまま出力する)
(Ctrl-D はファイルの終わり(EOF;end of file)を
示す特別な入力)
% cat < /etc/hosts
入出力のリダイレクト
入力、出力のリダイレクトを組み合わせる
% cat < /etc/hosts > file2
% cat > file2 < /etc/hosts
どちらの順番でもよい
キーボード・端末とファイルは同じ方法で
アクセスできるように作られている
標準入出力
• 一般に、ファイルにアクセスするためには、そのた
めの準備作業や後始末を必要とする
• 一組の入出力はあらかじめ標準装備されている
標準入力
標準出力
プロセス
両者をあわせて標準入出力という
• 標準入出力に対しては準備作業や後始末をする
必要がない