gpt4 book ai didi

无法将包含数据的数组添加到共享内存

转载 作者:行者123 更新时间:2023-11-30 17:55:51 26 4
gpt4 key购买 nike

我正在尝试将包含数据的文件写入我的共享内存段。然而,我所尝试的一切似乎只是给出错误段错误。我已经在互联网上寻找帮助超过一天了。

int main(int argc, char *argv[]).
{
int sm;
char *data;
int pid=atoi(argv[1]);
int key=atoi(argv[2]);
char (*d)[1025];
data=(char*) malloc(1025);


//put the data in the shared memory segment
FILE *file=fopen(argv[3], "r"); //r for read
if (file==0)
{printf("Could not open file");}
else
{
while(fgets(data, 1025, file)!=NULL)
{
fputs(data, file);
// puts(d);
}
fclose(file);
}

//access shared memory
//S_IWUSR gives owner the write permession
sm = shmget(key, 1024, S_IWUSR);
//create a pointer to the shared memory segment
d = shmat(sm, (void *)0, 0); //shared memory id, shmaddr, shmflg
//for (int j=0; j<100; j++)
strcpy(d[0], data);

shmdt(d); //detach the shared memory segment
//remove the shared memory segment
shmctl(sm, IPC_RMID, NULL);
}

任何帮助将不胜感激提前致谢

编辑:添加了 malloc

EDIT2:也许我应该重新表述我的问题,我的问题是将数据放入我的共享内存

最佳答案

关于rjayavrp答案+1

我可以补充一点,数据没有分配...这只是一个指针,而不是一个字符数组..

此外,你想用它做什么

char (*d)[1025];

一个快速而肮脏的例子:

#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define SIZE_SHARED_MEMORY 1024

int main(int argc, char *argv[])
{
int sm = -1;
char *d = NULL;
FILE *file = NULL;
key_t key = 0;
int ret = 0;

if (argc != 4)
{
return 1;
}

key = atoi(argv[2]);

//access shared memory
sm = shmget(key, SIZE_SHARED_MEMORY, IPC_CREAT | 0600);
if (sm == -1)
{
perror("shmget : Failed");
return 2;
}

//create a pointer to the shared memory segment
d = shmat(sm, (char *)0, 0);
if (d == (void *)-1)
{
perror("shmat : Failed");
return 3;
}

// Open the file
file = fopen(argv[3], "r");
if (file == NULL)
{
perror("fopen : Failed");
ret = 4;
}
else
{
if(fgets(d, SIZE_SHARED_MEMORY, file) == NULL)
{
perror("fgets : Failed");
ret = 5;
}
fclose(file);
}

shmdt(d); //detach the shared memory segment

// remove the shared memory segment ???
// Don't understand why you are doing this
shmctl(sm, IPC_RMID, NULL);

return ret;
}

关于无法将包含数据的数组添加到共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13913143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com