shmget()
C の関数について簡単な質問があります。プログラムは非常に単純です。ユーザーに shmid の入力を求め、キー、モード、所有者などを出力します。
私はbuffer->shm_perm.mode
許可を取得するために使用していますが、8 進数形式 (960 など) で許可を与えています。「 rwx 」のように許可を表示するように変更する方法はありますか?
ありがとう
shmget()
C の関数について簡単な質問があります。プログラムは非常に単純です。ユーザーに shmid の入力を求め、キー、モード、所有者などを出力します。
私はbuffer->shm_perm.mode
許可を取得するために使用していますが、8 進数形式 (960 など) で許可を与えています。「 rwx 」のように許可を表示するように変更する方法はありますか?
ありがとう
mode_t
によって生成される文字列に値を変換する (再入不可の) 関数ls
:
/*
** Convert a mode field into "ls -l" type perms field.
*/
static char *lsperms(int mode)
{
static char *rwx[] = {"---", "--x", "-w-", "-wx",
"r--", "r-x", "rw-", "rwx"};
static char bits[11];
bits[0] = filetypeletter(mode);
strcpy(&bits[1], rwx[(mode >> 6) & 7]);
strcpy(&bits[4], rwx[(mode >> 3) & 7]);
strcpy(&bits[7], rwx[(mode & 7)]);
if (mode & S_ISUID)
bits[3] = (mode & 0100) ? 's' : 'S';
if (mode & S_ISGID)
bits[6] = (mode & 0010) ? 's' : 'l';
if (mode & S_ISVTX)
bits[9] = (mode & 0001) ? 't' : 'T';
bits[10] = '\0';
return(bits);
}
ファイルタイプ(とにかくここでは関数は提供されていません)または特別な許可ビットが必要ないため、これは共有メモリに対して単純化できます。
/*
** Convert a mode field into "ls -l" type shared memory perms field.
*/
static char *shmperms(int mode)
{
static char *rwx[] = {"---", "--x", "-w-", "-wx",
"r--", "r-x", "rw-", "rwx"};
static char bits[10];
strcpy(&bits[0], rwx[(mode >> 6) & 7]);
strcpy(&bits[3], rwx[(mode >> 3) & 7]);
strcpy(&bits[6], rwx[(mode & 7)]);
bits[9] = '\0';
return(bits);
}