我在跨进程共享存储在struct
中的值时遇到问题。我的代码下面只有一个进程简化,它将增加值num2
。每当过程结束时,waitpid()
将该过程的pid
写入数组。这再次简化了,在我的大项目中,我有大约100个进程,他们先后在阵列中编写了他们的pid
。所以每个进程都会看到阵列。但是,对于其中的每一个,struct
中的整数值都不相同。为什么?在访问共享内存中的结构后出现Segfault错误?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <semaphore.h>
#include <sys/shm.h>
typedef struct{
int num;
int num1;
int num2;
char *array;
} data;
void c_print(data *a);
int main(int argc, char *argv[])
{
data *main_data;
int pam_id=shmget(IPC_PRIVATE,sizeof(data), IPC_CREAT | IPC_EXCL | 0666);
if (pam_id == -1)
fprintf(stderr,"error");
int k=shmat(pam_id,NULL,0);
if (k==NULL)
fprintf(stderr,"shmat error");
main_data=malloc(sizeof(data));
main_data->num = strtol(argv[1],NULL,10);
main_data->num1 = strtol(argv[2],NULL,10);
main_data->num2 = strtol(argv[3],NULL,10);
在不低于malloc
,访问main_data
导致段错误。但是,除数组外,其他进程无法查看存储在struct
中的变量。
main_data->array = malloc(main_data->num2*sizeof(char));
main_data->array[0]=fork();
if (main_data->array[0]==0){
main_data->num2+=2;
exit(9);
} else {
waitpid(-1,main_data->array[0],0);
c_print(main_data);
return 0;
}
return 50;
}
你为什么要对'main()'进行原型设计? – 2013-04-20 17:52:14
[这个问题](http://stackoverflow.com/questions/9967388/how-to-modify-shared-memory-shmget-shmat-in-c)也非常相似;唯一的区别是多指针。 – 2013-04-20 18:11:39