我正在执行下面给出的共享内存代码,但现在如果我必须从命令行给出字符串和字符串模式的数量,我该怎么办?然后我还要从共享内存区域读取字符串和字符串模式。
此外,如果我必须反转字符串并存储在同一位置,我该怎么办?
请帮我解决这个问题。
#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;
}
答案 0 :(得分:0)
根据用户的输入,你需要解析通过argv传递的内容。然后将值复制到代码中并将其写入共享内存区域。从您的代码中,您可以执行以下操作:
sprintf(shm, argv[1]);
解析传递给共享内存区域的第一个参数。要反转字符串,请将共享内存中的字符串复制到变量中,然后将其反转,最后将其从客户端代码写入共享内存区域。因为,你已经创建了具有666权限的shm,这应该允许客户端写入该部分。
如果您需要正确理解这个概念(http://www.cs.cf.ac.uk/Dave/C/node27.html)
,请查看此处