【发布时间】:2014-05-02 11:37:58
【问题描述】:
谁能告诉我另一种在 C 中使用共享内存在进程之间共享字符串的方法?我只用fors实现了这种粗制滥造的方式。我想使用类似 strcpy 或类似的东西。使用 int 非常简单,但是当指针开始播放时,对我来说变得如此困难。这是我为了寻找其他方式而实现的方式:
int memid,*nptr,i;
char mezua[50];
struct shmid_ds buff;
if ((memid=shmget(IPC_PRIVATE,sizeof(mezua),0600|IPC_CREAT))<0){
perror("shmget error");
exit(-1);
}
printf("%d\n",memid);
if((nptr=(char*)shmat(memid,0,0))==(char*)-1){
perror("shmat error");
exit(-1);
}
printf("Sartu nahi duzun mezua:\n");
__fpurge(stdin);
scanf("%s",mezua);
for(i=0;i<strlen(mezua);i++){
*(nptr+i)=mezua[i];
}
//**HERE WOULD GO THE OTHER WAY TO COPY STRINGS INTO SHARED MEMORY**
for(i=0;*(nptr+i)!='\0';i++)
printf("%c",*(nptr+i));
//**HERE WOULD GO THE OTHER WAY TO READ STRINGS FROM SHARED MEMORY**
if(shmdt(nptr)<0){
perror("shmdt error");
exit(-1);
}
if(shmctl(memid,IPC_RMID,&buff)==-1){
perror("shmctl error");
exit(-1);
}
非常感谢!
有一个漂亮的代码!
【问题讨论】:
-
for(i=0;i<strlen(mezua);i++){错误,它没有复制最后的 '\0' -
“共享字符串”是什么意思?更好的阐述。
-
将
int *nptr更改为char *nptr。nptr根据您的逻辑应该是字符指针。 -
这段代码运行良好,已经过测试。对不起,你没有回答我的问题。我想要另一种方式来读写共享内存。
-
也许 rohan 的方式是正确的。但是我可以使用 strcpy 吗?