SlideShare a Scribd company logo
1 of 16
詳解UNIXプログラミング

   3. ファイル入出力
ファイル記述子
カーネルがオープンしたファイルを参照する際
に使う

file descriptorの0,1,2はUNIXの多くのアプリ
ケーションでは標準入出力に割り当てられる

ファイルだけでなくディレクトリやソケットな
ども抽象化される
open関数

int open(const char *pathname, int oflag, .../* ,
mode_t mode */);

int fd = open(“./hoge.txt”, O_RDONLY);

ファイルをオープンしたり作成したりする

成功したらfdを返し、失敗したら-1を返す
creat関数

int creat(const char *pathname, mode_t mode);

UNIXの初期のバージョンではopenで作成でき
なかった

open(pathname, O_RDONLY | O_CREAT |
O_TRUNC, mode);と同じ
close関数
int close(int fd);

プロセスが終了すると自動的にカーネルがク
ローズしてくれるので明示的に用いなくてもよ
い
lseek関数

ストリームがつながっているファイルの位置
(current file offset)を操作する

off_t lseek(int fd, off_t offset, int whence);

ファイルオフセットはファイルのその時点のサ
イズを超えても良い
read関数

ssize_t read(int fd, void *buff, size_t nbytes);

オープンしたファイルからデータを読み取る

読み取ったバイト数分オフセットを増加させ
る
write関数

ssize_t write(int fd, const void *buff, size_t
nbytes);

書き込み操作は通常current file offsetから開始
ファイル共有
異なるプロセス間でオープンしたファイルを共
有できる

各プロセスごとプロセステーブルを保持

オープンされたすべてのファイルに対し、カー
ネルがファイルテーブルを保持

オープンされた各ファイルに対し、vノード構
造体が存在
プロセステーブル

ファイル記述子ごとにレコードが存在

各レコードは(a)ファイル記述子のフラグ (b)
ファイルテーブルへのポインタ を持つ
ファイルテーブル
(読み取り、書き込みなど)ファイル状態フラグ

カレントファイルオフセット

ファイルに対するvノードテーブルのポインタ

ファイルオフセットが異なるために各プロセス
ごとに独立したファイルテーブルを持つ
vノードテーブル

ファイルに関する情報や、ファイルに作用する
関数へのポインタが含まれる

ファイルのiノードも含まれる

iノードにはファイルの所有者やファイルのサ
イズ、実位置を示すポインタが含まれる
アトミック操作
   ファイル末尾の位置決めと書き込みのような論
   理的に不可分な2つ以上の処理=>アトミック化

   openする際にO_APPENDを設定するなど

if ( fd= open(pathname, O_WRONLY)) < 0)
   if (errno == ENOENT) {
      if( (fd = creat(pathname, mode)) < 0)
        fprintf(stderr, “creat errorn”);
      }else
        fprintf(stderr, “open errorn”);
dupとdum2関数
ファイル記述子を複製する

int dup(int fd);

同じファイルテーブルを共有する

同一のカレントファイルオフセットを持つ

ファイル記述子フラグは独立する
fcntl関数

オープンしているファイルの属性を変更する

int fcntl(int fd, int cmd, ... /* int arg */ );

(a) fdの複製、(b) fdフラグのget/set、(c) ファ
イル状態フラグのget/set、(d) 非同期入出力の
所有者のget/set、(e) レコードロックのget/set
ioctl関数


入出力操作に関する多機能関数

磁気テープやソケットなどの装置を扱うユー
ティリティ

More Related Content

Viewers also liked

ユーザ目線の実践的BPM
ユーザ目線の実践的BPMユーザ目線の実践的BPM
ユーザ目線の実践的BPMShigeaki Wakizaka
 
20161026_超高層大気観測データのメタデータ作成実験経過報告
20161026_超高層大気観測データのメタデータ作成実験経過報告20161026_超高層大気観測データのメタデータ作成実験経過報告
20161026_超高層大気観測データのメタデータ作成実験経過報告Yasuyuki Minamiyama
 
マインドハック研究会 ライフハック編 20100512
マインドハック研究会 ライフハック編 20100512マインドハック研究会 ライフハック編 20100512
マインドハック研究会 ライフハック編 20100512tosch0718
 
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼンhiroyuki Yamamoto
 
IGDA_Sig-BoardGame_ワークショップ用資料
IGDA_Sig-BoardGame_ワークショップ用資料IGDA_Sig-BoardGame_ワークショップ用資料
IGDA_Sig-BoardGame_ワークショップ用資料Ryosuke Sugawara
 
社内Gtd勉強会 20101022
社内Gtd勉強会 20101022社内Gtd勉強会 20101022
社内Gtd勉強会 20101022tosch0718
 
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」Marika UCHIDA
 
関西ライフハック研究会×アイデアプラント
関西ライフハック研究会×アイデアプラント関西ライフハック研究会×アイデアプラント
関西ライフハック研究会×アイデアプラントRikie Ishii
 
ふり返りハック ~ ライフをハッキングするために
ふり返りハック ~ ライフをハッキングするためにふり返りハック ~ ライフをハッキングするために
ふり返りハック ~ ライフをハッキングするために虹 父
 
Software Foundation:形式的証明と非形式的証明
Software Foundation:形式的証明と非形式的証明Software Foundation:形式的証明と非形式的証明
Software Foundation:形式的証明と非形式的証明T T
 
TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~Shuhei Hinoshita
 
GTD 残業を減らす方法
GTD 残業を減らす方法GTD 残業を減らす方法
GTD 残業を減らす方法Gaddict
 
DXライブラリのすゝめ
DXライブラリのすゝめDXライブラリのすゝめ
DXライブラリのすゝめDaisuke Nikura
 
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~満徳 関
 
ライフハック研究会Lt大会20120519
ライフハック研究会Lt大会20120519ライフハック研究会Lt大会20120519
ライフハック研究会Lt大会20120519Yasutaka Nariki
 
NetBSDとは
NetBSDとはNetBSDとは
NetBSDとはmiwarin
 
『トヨタ・仕事の基本大全』 の気になったポイント
『トヨタ・仕事の基本大全』の気になったポイント『トヨタ・仕事の基本大全』の気になったポイント
『トヨタ・仕事の基本大全』 の気になったポイントAyumu Kohiyama
 

Viewers also liked (20)

ユーザ目線の実践的BPM
ユーザ目線の実践的BPMユーザ目線の実践的BPM
ユーザ目線の実践的BPM
 
20161026_超高層大気観測データのメタデータ作成実験経過報告
20161026_超高層大気観測データのメタデータ作成実験経過報告20161026_超高層大気観測データのメタデータ作成実験経過報告
20161026_超高層大気観測データのメタデータ作成実験経過報告
 
マインドハック研究会 ライフハック編 20100512
マインドハック研究会 ライフハック編 20100512マインドハック研究会 ライフハック編 20100512
マインドハック研究会 ライフハック編 20100512
 
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
名古屋アジャイル勉強会トヨタ生産方式に学ぶカイゼン
 
IGDA_Sig-BoardGame_ワークショップ用資料
IGDA_Sig-BoardGame_ワークショップ用資料IGDA_Sig-BoardGame_ワークショップ用資料
IGDA_Sig-BoardGame_ワークショップ用資料
 
社内Gtd勉強会 20101022
社内Gtd勉強会 20101022社内Gtd勉強会 20101022
社内Gtd勉強会 20101022
 
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
理系女子の恋愛と結婚 「東大で理系の恋愛を語ろう」
 
関西ライフハック研究会×アイデアプラント
関西ライフハック研究会×アイデアプラント関西ライフハック研究会×アイデアプラント
関西ライフハック研究会×アイデアプラント
 
バージョン管理入門
バージョン管理入門バージョン管理入門
バージョン管理入門
 
ふり返りハック ~ ライフをハッキングするために
ふり返りハック ~ ライフをハッキングするためにふり返りハック ~ ライフをハッキングするために
ふり返りハック ~ ライフをハッキングするために
 
Software Foundation:形式的証明と非形式的証明
Software Foundation:形式的証明と非形式的証明Software Foundation:形式的証明と非形式的証明
Software Foundation:形式的証明と非形式的証明
 
TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~
 
GTD 残業を減らす方法
GTD 残業を減らす方法GTD 残業を減らす方法
GTD 残業を減らす方法
 
Unix2
Unix2Unix2
Unix2
 
X hago3
X hago3X hago3
X hago3
 
DXライブラリのすゝめ
DXライブラリのすゝめDXライブラリのすゝめ
DXライブラリのすゝめ
 
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
『スクラムを活用したアジャイルなプロダクト管理』第1回読書会 振り返り結果 POStudy ~プロダクトオーナーシップ勉強会~
 
ライフハック研究会Lt大会20120519
ライフハック研究会Lt大会20120519ライフハック研究会Lt大会20120519
ライフハック研究会Lt大会20120519
 
NetBSDとは
NetBSDとはNetBSDとは
NetBSDとは
 
『トヨタ・仕事の基本大全』 の気になったポイント
『トヨタ・仕事の基本大全』の気になったポイント『トヨタ・仕事の基本大全』の気になったポイント
『トヨタ・仕事の基本大全』 の気になったポイント
 

Unix3

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n