- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我尝试将 shmget 与二维数组一起使用。这是我的代码:
char **array;
key_t key;
int size;
int shm_id;
int i = 0;
void *addr;
key = // here I get the key with ftok()
size = (21 * sizeof(char *)) + (21 * sizeof(char **));
shm_id = // here I get the shmid with shmget()
if (shm_id == -1) // Creation
{
array = (char **)shmat(shm_id, NULL, SHM_R | SHM_W);
while (i != 20)
{
array[i] = memset(array[i], ' ', 20);
array[i][20] = '\0';
i++;
}
array[i] = NULL;
shm_id = // here I get the shmid with the flag IPC_CREAT to create the shared memory
addr = shmat(shm_id, NULL, SHM_R | SHM_W);
}
但是我在行“array[i] = memset(array[i], ' ', 20);”中遇到了段错误
我做错了什么?
最佳答案
您应该首先检查shmget 是否成功。如果共享内存分配失败,那么你就不能使用共享内存! ;-)喜欢:
If ( shm_id = shmget(.......) == -1) {
exit(1);
}
else {
/* proceed with your work*/
}
对于 shmat 也是如此。
shmget 返回 void*。您不能将它分配给 char** 并像二维数组一样使用它。事实上,一个 char* 在逻辑上可以很容易地作为一个二维数组来处理。
关于C : shmget with a 2D array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795577/
我有这段代码: 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
我是一名优秀的程序员,十分优秀!