1. ホーム
  2. c

[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?

2022-01-20 05:22:52

質問

私は、マクロ S_ISREG() ファイルの属性を取得するC言語プログラムの中で 残念ながら、このマクロに関する基本的な情報はネット上にはありません。もっと高度な議論もあるようですが、私が探しているものを超えています。

とは何ですか? S_ISREG() そして、それは何をするのでしょうか?ファイルの属性を取得するプログラムの場合、どのような目的で使用され、具体的にどのような動作をするのでしょうか?

ありがとうございました。

解決方法は?

S_ISREG() は、システムコール stat() から返される stat 構造体の値を解釈するために使用されるマクロです。引数(struct statのst_modeメンバ)が通常ファイルの場合、trueと評価されます。

参照 man stat , man fstat または man inode ( inode マニュアルページへのリンク )で詳細をご確認ください。以下は、マニュアルページの該当部分です。

   Because tests of the above form are common, additional macros are defined by POSIX to allow the test of the file type in st_mode to be written more concisely:

       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.)

   The preceding code snippet could thus be rewritten as:

       stat(pathname, &sb);
       if (S_ISREG(sb.st_mode)) {
           /* Handle regular file */
       }