システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.

Slides:



Advertisements
Similar presentations
1 ログイン ユーザ名: root パスワード: hosei (初期設定). 2 はじめに 対象 学部 1 年生 日時 毎週木曜 6 限 18 : 30 ~ 19:30 ( 初回のみ ~ 20 : 00) 開催場所 W211 各自持参するもの ノート PC LAN ケーブル.
Advertisements

システムプログラミング 第11回 シグナル 情報工学科 篠埜 功. 今回の内容 前回の補足( exit システムコールについ て) プロセス間通信 – シグナルの送信 --- 今回の内容 – パイプによる通信 – ソケットによる通信.
ネットワーク・プログラミ ング カーネルの役割とプロセス生成. 1.1 OS の役割 仮想マシン OS はハードウェアの多様性 をカプセル化し、利用者を 複雑な処理から開放する。 プロセス管理 時間多重化により各プロセ スに CPU を割当てる。 メモリ管理 メモリ空間の多重化により、 各プロセスにメモリを割当.
プロセスの生成とコマンドの実行 プロセスの生成とコマンドの実行 プロセス生成のシステムコール プロセス生成のシステムコール プロセス生成のプログラム例 プロセス生成のプログラム例 プログラム実行のシステムコール プログラム実行のシステムコール 子プロセスの終了を待つシステムコール 子プロセスの終了を待つシステムコール.
システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
情報処理概論Ⅰ 2007 第3回 2007/5/2 情報処理概論Ⅰ 第3回.
UNIX利用法.
UNIX利用法 情報ネットワーク特論資料.
Unix の ファイルシステム(File System)
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
コンピュータリテラシー 第3回授業の復習 基本的なUNIXコマンド
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
Linux リテラシ 2006 第2回 基本コマンド2.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
Linuxカーネルについて 2014/01.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
インターネット技術特論 B:コマンドライン, shell 山口 実靖
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
型付きアセンブリ言語を用いた安全なカーネル拡張
プログラミング論 ファイル入出力
システムプログラミング 第6回、7回、8回 情報工学科 篠埜 功.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
プログラミング論 ファイル入出力
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
UNIX演習 情報ネットワーク特論.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第4回 ファイル入出力方法.
C言語演習 情報ネットワーク特論.
オペレーティングシステム (ファイル) 2009年11月9日
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
プログラミング入門 電卓を作ろう・パートI!!.
システムプログラミング 第12回 プロセス間通信 情報工学科 篠埜 功.
ネットワーク・プログラミング デバイスドライバと環境変数.
情報処理Ⅱ 第7回 2004年11月16日(火).
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
高度プログラミング演習 (11).
モジュール分割.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
プログラミング 4 文字列.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
ネットワーク・プログラミング 1対多のプロセス間通信.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功

今日からの内容 Linuxのシステムコールを用いたCプログラムの作成 今日の内容 システムコールのエラーメッセージについて ファイルシステム

システムコールについて システムコールとは、カーネル内のコードを呼び出すためのC関数 ファイル、ネットワーク、キーボード等、ハードウェアとのやりとりはすべてカーネルが行う。ユーザはシステムコールを通じてカーネルにハードウェア操作を依頼する。 例えば、ファイルからデータを読み出す場合、getc, fgetcなどのライブラリ関数を呼ぶが、どんなライブラリ関数を呼んだとしても、最終的にはreadシステムコールが呼ばれ、カーネル内部のコードが実行される。

システムコールの実装 システムコールは、Cの関数であり、ライブラリファイル /usr/lib64/libc.a に入っている。 $ gcc -print-file-name=libc.a で表示される。 システムコールであるCの関数の中で、ハードウェア割り込みを起こす命令(トラップ命令)が実行される。これにより、カーネルの割り込み処理部分に制御が移る。トラップ命令実行時にシステムコールの番号を伝え、それによってそれぞれのシステムコールに対応するカーネルのコードに制御が移ることになる。 $ ar t /usr/lib64/libc.a | less でlibc.aの中身のオブジェクトファイルリストが表示される。write.o, read.oなどが入っている。

システムコールの番号 1 exit 2 fork 3 read 4 write 5 open 6 close 7 wait 8 creat 9 link 10 unlink 11 exec 12 chdir … 今後の講義でシステムコールを少しずつ紹介する。各システムコールのC関数が番号の設定を行うので番号は知らなくてよい。

システムコールのマニュアル システムコールはmanコマンドでマニュアルを表示できる。 例えば、 $ man -S 2 write $ man write とすると、writeコマンドのマニュアルが表示される。 $ man –a write とすると、writeの名前のマニュアルがすべて(PAGERがlessの場合はqを押すごとに)順番に表示される。 manコマンドの-Sの引数には分類番号を入れる。1はコマンド、2はシステムコール、3はライブラリ関数となっている。

システムコールのエラーメッセージ システムコールがエラーになった場合、エラー番号がerrnoという外部変数に代入されている。この番号を用いてエラーメッセージを出力するライブラリ関数perrorがあるのでそれを用いる。(errnoを直接使うプログラムは書かないほうがよい。) 例えば、$ ls aaa のように、lsコマンドで存在しないファイル名を指定した場合に、そのようなファイルは存在しないといったメッセージが出力される。ここではperror関数が用いられている。(そのようにlsコマンドが実装されている。)

ライブラリ関数perror void perror (char *s)

ファイルの1文字目を表示する例 (入力して実行、後で詳述) #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #define ERR -1 int main (void) { int fd, n; char c; if ((fd = open ("test", O_RDONLY)) == ERR) { perror ("open"); exit(1);} /* 続き */ if ( (n = read (fd, &c, 1) ) > 0 ) printf ("1文字目は%cです。\n", c); if (n==ERR) { perror ("read"); exit(1); } if (close (fd) == ERR) { perror ("close"); return 0;

演習課題 さきほどのプログラムを参考にして、テキストファイルの2文字目まで表示するプログラムをopenシステムコール, readシステムコールを使って作成せよ。 (さきほどと同様、printfは使うことにする。)

ファイル、プロセス OS(Linux)は、ファイルとプロセスを木構造で管理する。 まず、ファイルの木構造について学習する。

ファイル操作のシステムコール ファイルはOS(Linux)が管理している。 ファイルの操作等を行うためのシステムコールが提供される。 open, creat, close, read, write, lseek, dup, dup2等がある。 今日はopen, close, read, writeの解説を行う。この前に、まず、ファイルの基本事項の説明を行う。

ファイルとは UNIX系OSではファイルは1つの木構造で管理される。ルートディレクトリ以外は、すべてのファイルには親(ディレクトリ)がある。 ディレクトリもファイルの一種であり、そのディレクトリの子供のファイルの名前を保持しているファイルである。ディレクトリファイルも、(ルートディレクトリ以外は)何らかのディレクトリの子供である。 すべてのファイルはルートディレクトリから親子関係を辿ることによって到達できる。

デバイスファイル UNIXでは、端末、ディスク、磁気テープ、プリンタなどの周辺機器やメモリなどの装置のそれぞれに対応するファイルがある。特殊ファイル、あるいはスペシャルファイルとも呼ばれる。デバイスドライバに対するインタフェースであり、ファイルを扱うシステムコールで操作できる。これらのファイルは通常/devディレクトリ以下にある。 デバイスは次の2種類に分けられる。  キャラクタデバイス --- 端末やプリンタなど、文字単位で入出力を行う装置  ブロックデバイス --- ディスクや磁気テープ装置など、データをある程度まとまったブロック単位で処理する装置

ファイル名、パス名 ファイルには、名前がある。それをファイル名という。ディレクトリが違えば同じファイル名であっても別のファイルである。 パス名は、経路(パス)をファイル名の前につけたものである。 ファイル名は255文字以内、パス名は4095文字以内。大文字、小文字、数字、ピリオド、ハイフン、アンダーバーが使える。ファイル名に日本語は使えるが、現状では使わないのが無難。

絶対パス、相対パス 絶対パス --- ルートディレクトリから下向きに辿るパス 相対パス --- 現在のディレクトリからの相対的な経路で表すパス名で、上に行くこともある。 ピリオド --- 現在のディレクトリ(current directory)を表す。 ピリオド2つ --- 親ディレクトリを表す。 (例) ../.. は2つ上の親のディレクトリを表す。

ピリオドの役割 ピリオド . はカレントディレクトリを表す。カレントディレクトリの実行形式ファイルを実行するとき、 $ ./test のようにして実行する。単にファイル名を $ test のように打った場合は、testという実行形式ファイルを、環境変数PATHに格納されているディレクトリの中から順番に探すことになる。PATHに . が指定されていない場合は、カレントディレクトリにtestがあっても実行できない。また、testという名前の実行ファイルがシェルの内部コマンドだったり(実際は違うが)、他のPATHの(順番が先になっている)ディレクトリにあると、そちらが実行される。(実際に、/usr/bin/testが存在する。)

ホームディレクトリ ログイン時のディレクトリをホームディレクトリという。通常、/homeの下に作成される。(rootというユーザ(スーパーユーザ)のホームディレクトリは/rootである)。演習室では、(私sasanoの場合)/home/sitの下にある。ディレクトリを変更するコマンドがcd(シェルの内部コマンド)であり、これはchdirシステムコールを使って実現されている。ホームディレクトリはチルダ~で表される。

ファイルの保護 ファイルを他人(他のユーザ)に見られないように、permissionの指定ができる。 $ ls –al で確認できる。 d rwx rwx rwx の最初の桁以外は変更できる。 最初がdだとディレクトリ、-は一般のファイル。 そのあとは、owner, group, otherに対する読み書き実行の許可を表す。 (例) -rw-r—r--だと、一般ファイルで、所有者は読み書き、グループメンバーとその他のユーザは読み出しのみ許可。

Permissionの変更 Permissionの変更はchmodコマンドで行う。 $ chmod モード ファイル名 モードは、rwxの組を3桁の2進数と考え、これを8進1桁で表わし、8進3桁で指定することができる。例えば、rw-r--r--にしたい場合は644とする。 chmodは、chmodシステムコールを使って実現されている。

ファイルの所有者 ファイルには所有者、グループが関連づけられている。 $ ls –l で確認できる。 ファイルの所有者の変更はchownコマンド、グループの変更はchgrpコマンドで行う。これらはchownシステムコールを使って実現されている。ただし、所有者とスーパーユーザ以外は変更できない。