- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个关于 C 中的 shmget()
函数的快速问题。该程序非常简单。它要求用户输入一个 shmid,然后输出 key 、模式、所有者等。
我正在使用 buffer->shm_perm.mode
来获取权限,但它以八进制形式(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);
}
关于c - C 中 shmget() 函数的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16801548/
我有这段代码: if ((shmid = shmget(key, 512, IPC_CREAT | 0666)) 之后,您应该可以将其创建得更大一些。 关于c++ - shmget 大小限制问题,我
我正在尝试学习 IPC UNIX API,特别是共享内存。我已经创建了这个试图访问共享内存段或创建共享内存段的小程序。 这是我的做法: gcc -Wall -Wextra *.c # in one t
#include #include #include #include #include #include #include int main() { int i=0;
我正在编写一个简单的程序来分配共享内存,下面是shmget的示例代码, #define SHM_SIZE 1024 main(int argc,char **argv) { int s
我正在绞尽脑汁地想弄清楚为什么这在我的 Minix 系统上不起作用。 当我尝试编译 C 程序时,出现以下错误: #make link pm/pm program.o: In funct
int shmCreate(int id, int size) { int shmid key_t key; if ((key = ftok(".", id)) == -1)
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在尝试创建两组共享内存段。一个用于存储整数,另一个用于存储字符串。当我为我的整数创建共享内存段时,我在第二次 shmget 调用中不断收到错误消息。 keyS=5678; keyI=6789;
当我在下面的代码中运行 shmget 时,它返回一个值 -1,我不确定为什么会这样。其他一切似乎都运行良好。该代码只是应该从命令行获取几位数字,然后为它们创建共享内存。数字范围从 0 到 9。 #in
我创建了两个进程。其中一个创建共享内存块,另一个尝试读取它。此代码没有编译错误,但不知何故进程 2 的行为很奇怪。 过程 1: #include #include #include #inclu
我尝试将 shmget 与二维数组一起使用。这是我的代码: char **array; key_t key; int size; int shm_id; int i = 0; void *addr;
HugeTLB - Large Page Support in the Linux Kernel #include #include #include #include #define MB_
我正在使用 shmget 在我的 Linux 项目进程之间共享数据。 int shmget(key_t key, size_t size, int shmflg); 但是,任何其他程序也可以调用shm
在生产者流程中,我有以下内容。 说 MEMKEY 为 key_t 234500,并且 *shared_ring 是指向正在共享的数据结构 (donut_ring) 的指针。 int shmid, se
我需要一些有关此代码的帮助。 我在共享段中创建了一个struct msg_t,并在另一个段中创建了一个简单的字符串。在此方法中,首先附加两个段,然后要初始化字符串。然后我尝试将指向该字符串的指针(在第
使用以下参数调用: shmget(IPC_PRIVATE, sizeof(int), 0600); 我正在尝试确定将分配多少字节给共享内存块? 我认为它与 PAGE_SIZE 有关(在 32 位操作系
int shmid; int* locat; //create shared memory segment shmid = shmget(6666, size, 0666); if (shmid <
我有一个关于 C 中的 shmget() 函数的快速问题。该程序非常简单。它要求用户输入一个 shmid,然后输出 key 、模式、所有者等。 我正在使用 buffer->shm_perm.mode
在下面的示例中,我尝试使用 shmget 为 1 个整数和 10 个 foo 结构 分配内存并尝试线性访问它们。但是,它会因“地址边界错误”而出错。 对于 MacOS 系统(但在 Linux 上应该相
好的,所以我有一个字符串数组 char array[4][20]; //initialized strcpy(array[0], "PERSON1"); strcpy(array[1], "PERSO
我是一名优秀的程序员,十分优秀!