Unix-system-calls-lstat
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
Copyright©2014 by finddevguides
Home | References | Discussion Forums | About TP |
stat()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
stat、fstat、lstat-ファイルの状態を取得
概要
- #include <sys/types.h> * *#include <sys/stat.h> * *#include <unistd.h> *
- int stat(const char * path 、struct stat *buf ); * int fstat(int filedes、struct stat '''buf ); * *int lstat (const char * path 、struct stat * buf ); *
説明
これらの関数は、ファイルに関する情報を返します。 ファイル自体に対する権限は必要ありませんが、- stat ()および lstat ()の場合-ファイルにつながる_path_内のすべてのディレクトリに対する実行(検索)権限が必要です。
これらのシステムコールはすべて、次のフィールドを含む_stat_構造体を返します。
struct stat { dev_t st_dev; /*ID of device containing file*/ ino_t st_ino; /*inode number*/ mode_t st_mode; /*protection*/ nlink_t st_nlink; /*number of hard links*/ uid_t st_uid; /*user ID of owner*/ gid_t st_gid; /*group ID of owner*/ dev_t st_rdev; /*device ID (if special file)*/ off_t st_size; /*total size, in bytes*/ blksize_t st_blksize;/*blocksize for filesystem I/O*/ blkcnt_t st_blocks; /*number of blocks allocated*/ time_t st_atime; /*time of last access*/ time_t st_mtime; /*time of last modification*/ time_t st_ctime; /*time of last status change*/ }; |
_st_dev_フィールドは、このファイルが存在するデバイスを示します。
_st_rdev_フィールドは、このファイル(inode)が表すデバイスを示します。
_st_size_フィールドは、ファイルのサイズ(通常のファイルまたはシンボリックリンクの場合)をバイト単位で示します。 シンボリックリンクのサイズは、それに含まれるパス名の長さであり、末尾のヌルバイトはありません。
st_blocks_フィールドは、ファイルに割り当てられたブロック数を512バイト単位で示します。 (これは、ファイルに穴がある場合など、_st_size/512よりも小さい場合があります。)
_st_blksize_フィールドは、効率的なファイルシステムI/Oの「優先」ブロックサイズを提供します。 (小さなチャンクでファイルに書き込むと、非効率的な読み取り-変更-書き換えが発生する場合があります。)
すべてのLinuxファイルシステムがすべての時間フィールドを実装しているわけではありません。 一部のファイルシステムタイプでは、ファイルアクセスによって_st_atime_フィールドが更新されないようにマウントできます。 ( mount (8)の「noatime」を参照してください。)
フィールド_st_atime_は、ファイルアクセスによって変更されます。 execve (2)、 mknod (2)、 pipe (2)、 utime (2)および read (2)(0バイト以上)。 mmap (2)などの他のルーチンは、_st_atime_を更新する場合としない場合があります。
フィールド_st_mtime_は、ファイルの変更によって変更されます。 mknod (2)、 truncate (2)、 utime (2)および write (2)(0バイト以上)。 さらに、ディレクトリの_st_mtime_は、そのディレクトリ内のファイルの作成または削除によって変更されます。 _st_mtime_フィールドは、所有者、グループ、ハードリンクカウント、またはモードの変更に対しては変更されません。
フィールド_st_ctime_は、書き込みまたはinode情報(所有者、グループ、リンクカウント、モードなど)の設定によって変更されます。
_st_mode_フィールドを使用してファイルタイプをチェックするために、次のPOSIXマクロが定義されています。
Tag | Description |
---|---|
S_ISREG(m) | is it a regular file? |
S_ISDIR(m) | directory? |
S_ISCHR(m) | character device? |
S_ISBLK(m) | block device? |
S_ISFIFO(m) | FIFO (named pipe)? |
S_ISLNK(m) | symbolic link? (Not in POSIX.1-1996.) |
S_ISSOCK(m) | socket? (Not in POSIX.1-1996.) |
_st_mode_フィールドには、次のフラグが定義されています。
S_IFMT | 0170000 | bitmask for the file type bitfields |
S_IFSOCK | 0140000 | socket |
S_IFLNK | 0120000 | symbolic link |
S_IFREG | 0100000 | regular file |
S_IFBLK | 0060000 | block device |
S_IFDIR | 0040000 | directory |
S_IFCHR | 0020000 | character device |
S_IFIFO | 0010000 | FIFO |
S_ISUID | 0004000 | set UID bit |
S_ISGID | 0002000 | set-group-ID bit (see below) |
S_ISVTX | 0001000 | sticky bit (see below) |
S_IRWXU | 00700 | mask for file owner permissions |
S_IRUSR | 00400 | owner has read permission |
S_IWUSR | 00200 | owner has write permission |
S_IXUSR | 00100 | owner has execute permission |
S_IRWXG | 00070 | mask for group permissions |
S_IRGRP | 00040 | group has read permission |
S_IWGRP | 00020 | group has write permission |
S_IXGRP | 00010 | group has execute permission |
S_IRWXO | 00007 | mask for permissions for others (not in group) |
S_IROTH | 00004 | others have read permission |
S_IWOTH | 00002 | others have write permission |
S_IXOTH | 00001 | others have execute permission |
set-group-IDビット(S_ISGID)にはいくつかの特別な用途があります。 ディレクトリの場合、BSDセマンティクスがそのディレクトリに使用されることを示します:そこに作成されたファイルは、作成プロセスの有効なグループIDからではなく、ディレクトリからグループIDを継承し、そこに作成されたディレクトリもS_ISGIDビットセットを取得します。 グループ実行ビット(S_IXGRP)が設定されていないファイルの場合、set-group-IDビットは必須のファイル/レコードロックを示します。
ディレクトリの「スティッキー」ビット(S_ISVTX)は、そのディレクトリ内のファイルの名前を変更または削除できるのは、ファイルの所有者、ディレクトリの所有者、および特権プロセスのみであることを意味します。
Linuxノート
カーネル2.5.48以降、_stat_構造は3つのファイルタイムスタンプフィールドのナノ秒の解像度をサポートします。 Glibcは、_BSD_SOURCEまたは_SVID_SOURCE機能テストマクロが定義されている場合は_st_atim.tv_nsec_形式の名前を使用して、またはこれらのマクロのどちらも定義されていない場合は_st_atimensec_形式の名前を使用して各フィールドのナノ秒コンポーネントを公開します。 1秒未満のタイムスタンプをサポートしないファイルシステムでは、これらのナノ秒フィールドは値0で返されます。
_/proc_ディレクトリにあるほとんどのファイルでは、 stat ()は_st_size_フィールドにファイルサイズを返しません。代わりに、フィールドは値0で返されます。
返り値
成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。
エラー
Tag
説明
_path_のパスプレフィックス内のディレクトリの1つに対する検索許可が拒否されました。 ( path_resolution (2)も参照してください。)
_filedes_が悪いです。
住所が間違っています。
パスのトラバース中に検出されたシンボリックリンクが多すぎます。
ファイル名が長すぎます。
パス_path_のコンポーネントが存在しないか、パスが空の文字列です。
メモリー不足(つまり、 カーネルメモリ)。
パスのコンポーネントはディレクトリではありません。
準拠
これらのシステムコールは、SVr4、4.3BSD、POSIX.1-2001に準拠しています。
_st_blocks_および_st_blksize_フィールドを使用すると、移植性が低下する場合があります。 (BSDで導入されました。 解釈はシステム間で異なり、NFSマウントが関係する場合はおそらく単一のシステム上で行われます。
POSIXはS_IFMT、S_IFSOCK、S_IFLNK、S_IFREG、S_IFBLK、S_IFDIR、S_IFCHR、S_IFIFO、S_ISVTXビットを記述しませんが、代わりにマクロS_ISDIR()などの使用を要求します。 S_ISLNKおよびS_ISSOCKマクロはPOSIX.1-1996にはありませんが、両方ともPOSIX.1-2001にあります。前者はSVID 4から、後者はSUSv2からです。
Unix V7(およびそれ以降のシステム)にはS_IREAD、S_IWRITE、S_IEXECがあり、POSIXは同義語S_IRUSR、S_IWUSR、S_IXUSRを規定しています。
その他のシステム
さまざまなシステムで使用されている(または使用されている)値:
hex
name
ls
8進数
説明
f000
S_IFMT
170000
ファイルタイプのマスク
0000
000000
SCOのアウトオブサービスiノード、BSD不明タイプ
SVID-v2とXPG2には、通常ファイルの0と0100000の両方があります
1000
S_IFIFO
p|
010000
FIFO(名前付きパイプ)
2000
S_IFCHR
c
020000
キャラクタースペシャル(V7)
3000
S_IFMPC
030000
多重化文字特殊(V7)
4000
S_IFDIR
d/
040000
ディレクトリ(V7)
5000
S_IFNAM
050000
XENIX名前付き特殊ファイル
st_rdev値1、2で区別される2つのサブタイプ
0001
S_INSEM
s
000001
IFNAMのXENIXセマフォサブタイプ
0002
S_INSHD
m
000002
IFNAMのXENIX共有データサブタイプ
6000
S_IFBLK
b
060000
ブロックスペシャル(V7)
7000
S_IFMPB
070000
多重化ブロック特殊(V7)
8000
S_IFREG
-
100000
レギュラー(V7)
9000
S_IFCMP
110000
VxFS圧縮
9000
S_IFNWK
n
110000
ネットワークスペシャル(HP-UX)
a000
S_IFLNK
l@
120000
シンボリックリンク(BSD)
b000
S_IFSHAD
130000
ACLのSolarisシャドウiノード(ユーザー空間には表示されません)
c000
S_IFSOCK
s=
140000
ソケット(BSD、VxFSの「S_IFSOC」)
d000
S_IFDOOR
D>
150000
ソラリスドア
e000
S_IFWHT
w%
160000
BSDホワイトアウト(iノードには使用されません)
0200
S_ISVTX
001000
「スティッキービット」:使用後もスワップされたテキストを保存する(V7)
予約済み(SVID-v2)
ディレクトリ以外の場合:このファイルをキャッシュしないでください(SunOS)
ディレクトリ上:制限付き削除フラグ(SVID-v4.2)
0400
S_ISGID
002000
実行時のグループIDの設定(V7)
ディレクトリの場合:GIDの伝播にBSDセマンティクスを使用
0400
S_ENFMT
002000
SysVファイルロックの強制(S_ISGIDと共有)
0800
S_ISUID
004000
実行時のset-user-ID(V7)
0800
S_CDF
004000
ディレクトリはコンテキスト依存ファイル(HP-UX)
スティッキーコマンドは、バージョン32V AT&T UNIXで登場しました。
関連項目
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]
広告
Advertisements |