このページを編集する際は、編集に関する方針に従ってください。

概要

引数

  • filename--ファイル名
  • flags--フラグ
    フラグ名説明
    O_ACCMODE0003ファイルアクセスモードのマスク
    O_RDONLY00読み込み専用
    O_WRONLY01書き込み専用
    O_RDWR02読み書き可能
    O_CREAT0100ファイルを作成してオープンする(fcntl()で使えない)
    O_EXCL0200排他的にオープンする(fcntl()で使えない)
    O_NOCTTY0400制御ターミナルを割り当てない(fcntl()で使えない)
    O_TRUNC01000切捨てオープンする(fcntl()で使えない)
    O_APPEND02000アペンド(ファイルの最後に書き込むことが保証される)
    O_NONBLOCK04000POSIX型ノンブロッキングI/O
    O_NDELAYO_NONBLOCKノンブロッキングI/O
    O_SYNC010000データおよび属性のライトスルー キャッシング
    FASYNC020000非同期通知(BSD互換)
    O_DIRECT040000ダイレクトディスクアクセス
    O_LARGEFILE0100000ラージファイルを使用可能にしてファイルシステムをマウントし、 O_LARGEFILE オプションでファイルをオープンすると、ファイルを 2 GB を超えて増やすことができる
    O_DIRECTORY0200000ディレクトリである
    O_NOFOLLOW0400000シンボリックリンクではない
    O_NOATIME01000000最終アクセス時刻 (inode の st_atime) を更新しない
  • mode--ファイル付与されているパーミッション

実装

/*

* Note that while the flag value (low two bits) for sys_open means:
*	00 - read-only
*	01 - write-only
*	10 - read-write
*	11 - special
* it is changed into
*	00 - no permissions needed
*	01 - read-permission
*	10 - write-permission
*	11 - read-write
* for the internal routines (ie open_namei()/follow_link() etc). 00 is
* used by symlinks.
*/

struct file *filp_open(const char * filename, int flags, int mode) {

	int namei_flags, error;
	struct nameidata nd;
  • パス名のルックアップ処理で使われる作業データ
	namei_flags = flags;
	if ((namei_flags+1) & O_ACCMODE)
		namei_flags++;
	if (namei_flags & O_TRUNC)
		namei_flags |= 2;
	error = open_namei(filename, namei_flags, mode, &nd);
	if (!error)
		return dentry_open(nd.dentry, nd.mnt, flags);
	return ERR_PTR(error);
  • errorをvoidへのポインタにして返す
    • これによりオブジェクトと比較することが可能になる
    • 詳細はERR_PTR()/linux2.6を参照

}

呼出元


履歴

  • 作者:ひら
  • 日付:2006/9/6
  • 対象:2.6.10
    更新日更新者更新内容
    2007/7/1たいら?引数の説明を追記

コメント/タグ?


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-13 (日) 23:32:31 (253d)