如何在分叉之间共享数组
How to share an array between forks?
我正在编写这段代码,它基本上需要一个参数来指定我想要多少个子线程,分叉来获取它们,然后打印存储在数组中的所有 pid。
如果只有父母需要PID,那就好了,但我也需要孩子获得他们的IDS(pcid)。我从网上复制并粘贴了一些代码(我不太明白),所以我不确定为什么它不起作用。
第一次PID打印后出现分割错误。
这是怎么回事?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/shm.h>
#include <sys/ipc.h>
int main(int argc, char *argv[])
{
if(argc < 2) {
printf("ERROR: No arguments fed.n");
exit(-1);
}
int amount = atoi(argv[1]);
int i;
int pid = 1;
int pcid = 0;
key_t key;
int shmid;
int *arr[amount];
key = ftok("thread1.c",'R');
shmid = shmget(key, 1024, 0644 | IPC_CREAT);
for(i = 0; i < amount; i++)
{
if(pid != 0)
{
pid = fork();
}
*arr = shmat(shmid, (void *) 0, 0);
if(pid != 0)
{
*arr[i] = pid;
}
else
{
pcid = *arr[i];
break;
}
}
if(pid != 0)
{
printf("Printing PID Array:n");
for(i =0; i < amount; i++)
{
printf("%dn", *arr[i]);
}
}
else
{
printf("My PID: %dn",pcid);
}
}
您正在使用指针数组。在第 *arr = shmat(shmid, (void *) 0, 0)
行中,您将共享内存访问点分配给数组的第一个元素。现在,当您使用*arr[i] = pid
时,它将转到未知地址所在的数组i+1
元素,并尝试在那里放置一个值。所以你得到了分段错误。
相关文章:
- 如何在类中安全地访问 const 共享数组
- 在 MPI 中共享数组的一部分
- 在两个结构之间共享数组
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- MPI_Get仅从共享内存区域读取数组的第一个元素
- 共享_ptr中多功能数组的类型是什么
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 在 MPI (C++) 中共享整数数组
- C 98 Mutex中共享数组的锁定变量
- 如何在分叉之间共享数组
- 在与 OpenMP 并行的嵌套 for 循环中写入共享数组(通过指针)如何产生错误的结果
- 如何将值加载到外部共享数组中
- 两个进程之间共享数组
- 嵌入 Python 时共享数组的最简单方法
- 在c++中读取和写入共享数组
- c++在模块间共享数组元素,仅对少数字段具有const性
- 如何在c++中使用静态变量在不同的类之间共享数组
- 与 STL 向量共享数组
- 通过属性在c++和QML之间共享数组或列表