2014-05-02 58 views
0

任何人都可以告诉我另一种方法来在使用共享内存的进程之间共享C中的字符串吗?我只使用fors实现了这种低劣的方式。我想使用像strcpy或类似的东西。使用int非常简单,但是当指针开始播放变得如此难以形成我时。下面是我为了寻找其他方式achived方式:C中的共享内存 - 共享字符串

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); 
    } 

非常感谢!

有一个很好的代码!

+0

'为(I = 0; I Grapsus

+0

什么你的意思是“共享字符串”吗?更好的阐述。 – Deduplicator

+2

将'int * nptr'更改为'char * nptr'。根据你的逻辑,'nptr'应该是字符指针。 – Rohan

回答

0

您可能会喜欢阅读man strcpy

nptr一个char*和做

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

.... 

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