Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Unix /linuxファイルの属性とそのシステムコール

Unix /linuxファイルの属性とそのシステムコール

  

表1.ファイル属性の取得(stat、fstat、lstat)

2.ファイルの種類2.1ファイルの種類に含まれるファイルの種類2.2ファイルの種類のテストのマクロ2.3ファイルの種類のテストの例3.ファイルのアクセス許可3.2パーミッションについての細部3.3ユーザーIDとグループIDの設定3.4システムコールのファイルパーミッション3.4.1 umask関数3.4.2 chmodとfchmod 3.4.3 chown fchownとlchown 4.ファイル時間4.1 utime関数
<ファイルには、タイプ、権限、長さ、状態などの属性があります。この記事では、これを要約して関連するシステムコールについて説明します。

1.ファイル属性(stat、fstat、lstat)を取得します。

3つのstat関数はファイルに関する情報を返すことができます。

[code] #include

int stat(const char *パス名、struct stat * buf); int fstat(intファイル名、struct stat * buf); int lstat(const) Char * pathname、struct stat * buf);戻り値:成功0失敗-1 [/code]

3つの関数の違いは、statの最初のパラメータがファイル名、fstatが最初のパラメータファイルであることです。記述子の最初のパラメータlstatはファイル名です。そして、彼はシンボリックリンク参照ファイルの情報ではなく、シンボリックリンクの情報を返します。

2番目のパラメータbuf構造体ポインタは、提供しなければならない構造体です。基本的な形態:構造体STAT {mode_t st_modeの; /*ファイルタイプとファイルアクセス許可* /ino_t st_inoによって取得、ファイルに関連付けられている/* iノード* /のdev_t st_devフィールド; /* * /nlink_t st_nlinkファイルデバイスを保存; /*ファイルへのハードリンク* /uid_t型ST_UIDの数; /*ファイルの所有者UID * /gid_tのst_gid; /*ファイルの所有者GID * /off_tではst_size; /*ファイルのバイト数、ファイルが有効な普通* /time_t型はst_atimeあり; /*ファイルが最後にアクセスされた日時* /time_t st_mtime; /*ファイルの内容が最後に変更された日時* /time_t st_ctime; /*ファイルのアクセス権、所有者、グループ、または内容が最後に変更された日時最も可能性の高い機能はファイルに関するすべての情報を得るための `ls -l`コマンドです。以下では、statの内容に従ってファイルの属性情報を理解します。

2.ファイルタイプ構造体statには、st_modeのファイルタイプ情報が含まれています(st_modeには、ファイルタイプとファイルパーミッションの両方が含まれています)。

2.1ファイルの種類は次のとおりです。1.通常ファイル/通常ファイル最も長いファイルの種類。データはテキストまたはバイナリのどちらでもかまいません。UNIXカーネルの場合と違いはありません。

2.ディレクトリファイル/ディレクトリファイルこのファイルには、他のファイルの名前とそれらのファイルに関する情報へのポインタが含まれています。

3. block special file。このファイルタイプは、デバイスへのバッファ付きアクセスを提供します。各アクセスは固定長単位で行われます。

4.キャラクタ型スペシャルファイルこのタイプのファイルは、デバイスへのバッファなしアクセスを提供します。各訪問の長さは可変です。

5. FIFOこのタイプのファイルは、プロセス間通信に使用され、名前付きパイプにもなります。

6. Socket /socketこのファイルタイプは、プロセス間のネットワーク通信に使用されます。

7.シンボリックリンク/sysbolicリンクこの種類のファイルは、別のファイルを指しています。

2.2ファイルの種類をテストするためのマクロファイルの場合は、ファイルの種類を判断するために次のマクロを使用できます。これらのマクロのパラメータは、statのst_modeメンバです。
は、

S_ISREG()通常のファイルS_ISDIR()は、ファイルがブロック特殊ファイルのS_ISCHRは()文字は、特殊なファイルS_ISFIFOがあるかどうかをテストするかどうかをテストするには、ディレクトリS_ISBLKは()であるかどうかをテストするかどうかをテストするために()パイプラインS_ISSOCKかどうか()テストをテストしますサブS_ISLNKソケット()はリンクファイル

2.3試験例ファイルタイプかどうかをテストある[コード]ファイル名:file_type.cの#includeの#includeの#includeの#include

INTメイン(INT ARGC 、CHAR * ARGV [])

{int型のRET;構造体スタットstat_buf;チャー*のp_file_type;

(i = 1; I< ARGC; iはint型私は++){IF( (RET = LSTAT(ARGV [i]は、&#038; stat_buf))== -1){関数fprintf(stderrに、"%S——>! LSTATエラー\\ n"、ARGV [I]);続けます。 }(S_ISREG(stat_buf.st_mode))であれば

p_file_type ="(S_ISDIR(stat_buf.st_mode))であれば正規";他

p_file_type =" DIR";そうであれば(S_ISCHR (stat_buf.st_mode))

p_file_type ="文字の特殊";それ以外の場合(S_ISBLK(stat_buf.st_mode))

P _file_type ="ブロック特殊";そうであれば(S_ISLNK(stat_buf.st_mode))

p_file_type ="シンボリックリンク";そうであれば(S_ISFIFO(stat_buf.st_mode))

p_file_type = " FIFO";そうであれば(S_ISSOCK(stat_buf.st_mode))

p_file_type ="ソケット";他p_file_type =" unknow";のprintf("%S——>%S \\ n",のargv [i]は、p_file_type);}

戻り0;}

[/コード]試験[コード] [試験@試験stat_code] $ ./file_typeの/dev /initctl /etc /passwdファイルは/dev /sdaには/dev /TTYは/dev /ログは/dev /CDROMの/dev /initctl——> FIFO /etc /passwdファイル——>正規の/dev /sdaに——>ブロック特別の/dev /ttyの——>文字特別の/dev /ログイン——>ソケットは/dev /CD-ROM——>シンボリックリンク[テスト@テストstat_code] $ [/コード]



Copyright © Windowsの知識 All Rights Reserved