STRMODE(3)

名称
strmode - inode ステータス情報をシンボル文字列に変換

ライブラリ
libc

書式
#include <string.h> void strmode(mode_t mode, char *bp)

解説
strmode() 関数は、ファイル mode (inode に結合されるタイプとパーミッションの情報については、 stat(2) を参照) をシンボル文字列に変換し、それを bp で参照される場所に保存します。 保存されるこの文字列は、長さが 11 文字で最後にヌル文字が付きます。

最初の文字は inode タイプで、次のいずれかになります :

-   通常ファイル
b   ブロック型特殊ファイル
c   文字型特殊ファイル
d   ディレクトリ
l   シンボリックリンク
p   fifo
s   ソケット
w   whiteout
?   未知の inode タイプ

次に続く 9 つの文字は、3 文字毎に 3 つのパーミッションセットをコード化します。 最初の 3 つの文字はファイル所有者のためのパーミッションで、 2 番目の 3 文字はファイルが所属するグループのためのもの、 そして 3 番目の 3 文字は ``他者'' またはデフォルトのユーザセット用です。

パーミッションチェックは、できる限り明確に限定して行われます。 最初のパーミッションセットでファイルの所有者に対して 読み取り許可が拒否された場合は、 ファイルの所有者はそのファイルを読み取ることができません。 このことは、その所有者がファイルのグループに入っており、 そのグループパーミッションによって読み取り許可が与えられている場合、 または読み取りを許可する ``他者'' のパーミッションが 与えられている場合でも当てはまります。

3 文字セットの最初の文字が ``r'' である場合は、 そのファイルはそのユーザセットに対して読み取り可能です。 文字がダッシュ ``-'' 場合は、読み取りできません。

3 文字セットの 2 番目の文字が ``w'' である場合は、 そのファイルはそのユーザセットに対して書き込み可能です。 文字がダッシュ ``-'' である場合は、書き込みできません。

3 番目の文字は、次の該当する文字です :

S   文字が所有者パーミッションの一部であり、 ファイルが実行可能ではないか、 またはディレクトリが所有者によって検索可能ではなく、 set-user-id ビットが設定されている場合。

S   文字がグループパーミッションの一部であり、 ファイルが実行可能ではないか、 またはディレクトリがグループによって検索可能ではなく、 set-group-id ビットが設定されている場合。

T   文字が他者のパーミッションの一部であり、 ファイルが実行可能ではないか、 またはディレクトリが他者のものによって検索可能ではなく、 ``sticky'' (S_ISVTX) ビットが設定されている場合。

s   文字が所有者パーミッションの一部であり、 ファイルが実行可能であるか、 またはディレクトリが所有者によって検索可能であり、 set-user-id ビットが設定されている場合。

s   文字がグループパーミッションの一部であり、 ファイルが実行可能であるか、 またはディレクトリがグループによって検索可能であり、 set-group-id ビットが設定されている場合。

t   文字が他者のパーミッションの一部であり、 ファイルが実行可能であるか、 またはディレクトリが他者のものによって検索可能であり、 ``sticky'' (S_ISVTX) ビットが設定されている場合。

x   ファイルが実行可能であるか、またはディレクトリが検索可能。

-   上のいずれにも該当しない。

最後の文字は inode に結合された別のアクセス制御方法が何かある場合は、 プラス記号 ``+'' です。 それ以外の場合は、文字はスペースになります。

戻り値
strmode() 関数は、常に 0 を返します。

参照
chmod(1), find(1), stat(2), getmode(3), setmode(3)

歴史
strmode() 関数は 4.4BSD で初めて登場しました。