程序基于共享内存

时间:2013-08-12 09:40:32

标签: linux ubuntu ipc

我正在执行下面给出的共享内存代码,但现在如果我必须从命令行给出字符串和字符串模式的数量,我该怎么办?然后我还要从共享内存区域读取字符串和字符串模式。

此外,如果我必须反转字符串并存储在同一位置,我该怎么办?

请帮我解决这个问题。

#define SHMSIZE 500 / *我们给出的共享内存大小* /

int main(int argc, char *argv[])
{
int shmid;
key_t key;
char *shm;



key = 5876;

shmid = shmget(key,SHMSIZE,IPC_CREAT| 0666);            /*Creating Shared Memory */    

if(shmid < 0)
{
perror("shmget");
  exit(1);
}

shm = shmat(shmid,NULL,0);                          /* Shared Memory Attachment */
if(shm == (char *) -1)
{
perror("shmat");
exit(1);
}

printf("Memory attached at %X\n",(int) shm);          /* Printing the address where     Memory is attached */

sprintf(shm,"God is Great");                          /* Write a string to the shared memory */

shmdt(shm);                                           /* Deattach the shared memory segment  */

shm = shmat(shmid,(void *) 0x50000000,0);             /*Reattach the shared memory segment */

printf("Memory Reattached at %X\n",(int) shm);

printf("%s\n",shm);                                   /* Print the desired string */

return 0;

}

1 个答案:

答案 0 :(得分:0)

根据用户的输入,你需要解析通过argv传递的内容。然后将值复制到代码中并将其写入共享内存区域。从您的代码中,您可以执行以下操作:

 sprintf(shm, argv[1]);

解析传递给共享内存区域的第一个参数。要反转字符串,请将共享内存中的字符串复制到变量中,然后将其反转,最后将其从客户端代码写入共享内存区域。因为,你已经创建了具有666权限的shm,这应该允许客户端写入该部分。

如果您需要正确理解这个概念(http://www.cs.cf.ac.uk/Dave/C/node27.html

,请查看此处