0
我有一個關於C中的shmget()
函數的簡單問題。該程序非常簡單。它要求用戶輸入一個shmid,並把它放出密鑰,模式,所有者等。在C中的shmget()函數的權限
我正在使用buffer->shm_perm.mode
獲得權限,但它以八進制形式(960等)提供權限。有什麼辦法可以改變它,所以它顯示像「rwx」的權限?
感謝
我有一個關於C中的shmget()
函數的簡單問題。該程序非常簡單。它要求用戶輸入一個shmid,並把它放出密鑰,模式,所有者等。在C中的shmget()函數的權限
我正在使用buffer->shm_perm.mode
獲得權限,但它以八進制形式(960等)提供權限。有什麼辦法可以改變它,所以它顯示像「rwx」的權限?
感謝
A(非重入)函數將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);
}
由於代碼使用'strcpy()',空終止符的分配嚴格冗餘。 –
你必須編寫代碼;這並不是那麼困難,但是沒有一個衆所周知的標準功能可以爲你做到。 –
我*希望*八進制不會給你一個數字'9'!可能是十六進制? – dmckee
@Jonathan Leffler,我有整個程序的編寫和工作。我只想改變上面的行,所以它給了我「rwx」而不是960的許可。權限是正確的,但我需要更改合成。 – Neo