の意味!

3199 ワード

stat.hヘッダファイルは、ファイルのプロパティを簡単に取得する前に、ファイルの長さを取得するために、最初から1バイトずつ計算するのに苦労しました.
Webserverをすると、stat関数がファイルのすべての属性を含む構造を返すことができることに気づきました.曲折ですね.
#i ncludestat.h> int stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int fields,struct stat *buf); int lstat(const char *restrict pathname,struct stat *restrict buf);
戻り値:成功すると0、失敗すると-1を返しpathnameが与えられるとstat関数はこのネーミングファイルに関する情報構造を返し、fstat関数は記述子fieldsで開いたファイルに関する情報を取得します.lstat関数はstat.と似ていますが、名前の付いたファイルがシンボルリンクである場合、lstatはシンボルリンクによってファイルを参照する情報ではなく、シンボルリンクに関する情報を返します.2番目のパラメータbufはポインタであり、bufが指す構造を記入する必要がある構造を指します.この構成の実際の定義は、実装によって異なる場合がある.struct stat{
mode_t st_mode; //
ino_t st_ino; //i
dev_t st_dev; //device number (file system)
dev_t st_rdev; //device number for special files
nlink_t st_nlink; //
uid_t st_uid; // ID
gid_t st_gid; // ID
off_t st_size; //size in bytes,for regular files
time_t st_st_atime; //
time_t st_mtime; //
time_t st_ctime; //
blksize_t st_blksize; //best I/O block size
blkcnt_t st_blocks; //number of disk blocks allocated
};
ファイルタイプ:一般ファイル、ディレクトリファイル、ブロック特殊ファイル、文字特殊ファイル、ソケット、FIFO、シンボルリンク.ファイルタイプ情報はstat構造のst_に含まれるmodeメンバーでは、stat構造のst_であるファイルタイプを次のマクロで決定できます.modeメンバーS_ISREG();S_ISDIR();S_ISCHR();S_ISBLK();S_ISFIFO();S_ISLNK();S_ISSOCK()例:#i nclude int main(int argc,char*argv[]){int i;struct stat buf;char*ptr;for(i=1;i{if(argv[i],&buf)<0){perror(「エラーの原因は」);                 continue;                }
if(S_ISREG(buf.st_mode))ptr="一般ファイル";if(S_ISDIR(buf.st_mode))ptr="ディレクトリ";                       //……and so on…                        cout<          }         exit(0);      } POSIX.1(Portable Operation System Interface)は、この仕様に適合するオペレーティングシステム間の動作が一致し、システム呼び出しが一致するオペレーティングシステム仕様のセットです.UnixはAT&Tの登録商標で、他のメーカーは有料で使用できます.SolarisはSUN社のUNIXシステムです.著作権の問題でUnix LinuxはGNUのオペレーティングシステムプロジェクトとは言えません.Unixオペレーティングシステムです.->POSIX.1プロセス間通信(IPC)のオブジェクト(メッセージキューや信号量など)をファイルとして表すことができる.以下のマクロは、IPCオブジェクトの種類を決定するために用いることができる.以下のマクロとS_ISREGなどのマクロは異なり、それらのパラメータはst_ではありません.modeではなくstat構造を指すポインタである.例えば、S_TYPEISMQ()はメッセージキューを表す.S_TYPEISSEM()は信号量を表す.S_TYPEISSHM()は、共有記憶オブジェクトを表す.プロセスが開くたびに、ファイルを作成または削除するたびに、カーネルはファイルアクセス権テストを行います.このテストは、ファイルの所有者(st_uidおよびst_gid)、プロセスの有効ID(有効ユーザーIDまたは有効グループID)、およびプロセスの追加グループIDに関連する可能性があります.2つの所有者IDはファイルの性質であり、2つの有効IDと追加グループIDはプロセスの性質です.カーネルのテストは(1).プロセスの有効なユーザIDが0(スーパーユーザ)である、アクセスが許可される.(2).プロセスの有効ユーザIDがファイルの有効ユーザIDと等しい場合、該当者の適切なアクセス権限が設定されると、アクセスが許可される.(3).プロセスの有効なグループIDまたはプロセスの追加のグループIDのいずれかがファイルのグループIDと等しい場合、グループの適切なアクセス権限ビットが設定され、アクセスが許可される.(4).他のユーザーの適切なアクセス権ビットが設定されている場合、アクセスは許可されます.以上の4つのステップを順番に実行します.変換元:http://hi.baidu.com/%CC%EC%D6%AE%B2%C3/blog/item/93d9a61388695724dd5401c9.html