【问题标题】:Shared memory in C - Sharing stringsC 中的共享内存 - 共享字符串
【发布时间】: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&lt;strlen(mezua);i++){ 错误,它没有复制最后的 '\0'
  • “共享字符串”是什么意思?更好的阐述。
  • int *nptr 更改为char *nptrnptr 根据您的逻辑应该是字符指针。
  • 这段代码运行良好,已经过测试。对不起,你没有回答我的问题。我想要另一种方式来读写共享内存。
  • 也许 rohan 的方式是正确的。但是我可以使用 strcpy 吗?

标签: c string memory shared


【解决方案1】:

您可能想阅读man strcpy

nptr 设为char* 并执行

strcpy(nptr, mezua); /* Copies from mezuato SHM. */

....

strcpy(mezua, nptr); /* Copies form SHM to mezua. */

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多