2015-04-25 2 views
1

Существует две программы: сервер вызовов, в который помещается контент в разделяемой памяти, а другой - клиент, который получил контент из общей памяти, оба в обеих программах успешно подключены к общей памяти, но данные не отображаются на стороне клиента.программа общей памяти не работает в c

Client.c

#include<fcntl.h> 
#include<sys/ipc.h> 
#include<sys/shm.h> 
void main(int argc,char * argv[]) 
{ 
    int shmid=shmget(124,70,0777); 
    char * data; 
    printf("%d\n",shmid); 
    data=shmat(shmid,0,0); 
    printf("%s",data); 
} 

Server.c

#include<fcntl.h> 
#include<sys/ipc.h> 
#include<sys/shm.h> 
void main(int argc,char * argv[]) 
{ 
    int shmid=shmget(124,70,0777|IPC_CREAT); 
    char * data,*ptr; 
    printf("%d\n",shmid); 
    if((data=shmat(shmid,0,0))==(char *)-1); 
    { 
     printf("No attach\n"); 
    } 
    ptr=data; 
    memset(data,0,1024); 
    printf("%s",data); 
    char c[]="My name is milap pancholi"; 
    int i=0; 
    for(i=0;i<sizeof(c);i++) 
    { 
     printf("%c",c[i]); 
     data+=c[i]; 
    } 
    printf("%s\n",ptr); 
} 

ответ

1

Ваша главная проблема заключается в следующем:

data+=c[i]; 

Это арифметика указателей, продвигаясь data, не то, что вы хотите в все. Замените его:

data[i] = c[i]; 

Другие вопросы:

  • main возвращает int, не аннулируются. Используйте int main() { ... }, если вам не нужны счетчики и значения аргументов (во избежание предупреждений, которые вы должны повернуть способом вверх).
  • Вы упускаете #include <stdio.h> для printf
  • Вы упускаете #include <string.h> для memset
+0

вопрос да это решить спасибо ..... –

Смежные вопросы