0

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

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

请帮我解决这个问题。

#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;

}
4

1 回答 1

0

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

 sprintf(shm, argv[1]);

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

如果您需要正确理解该概念,请查看此处(http://www.cs.cf.ac.uk/Dave/C/node27.html

于 2013-08-12T10:31:35.213 回答