2013-12-07 70 views
0

我需要一些幫助這個代碼。共享內存段shmget shmat雙重訪問都

我在共享段中創建了一個struct msg_t,而在另一個段中,我創建了一個簡單的string。 在這種方法中,首先我連接兩個段,然後我想初始化字符串。 然後我嘗試寫入我的struct msg_t(在我的第一部分)字段指向該字符串(分配在第二部分)的字段。我做了很多測試,但似乎當我嘗試打印該字段的內容時,它從第一個段打印「」。

我該怎麼做?感謝您的幫助。

msg_t* msg_init_string(void* content) { 
    //viene creata una copia "privata" della stringa 
    msg_t* new_msg; 
    int new_msg_id; 
    int content_id; 
    char* string = (char*) content; 
    if ((new_msg_id = shmget(ftok(FILENAME2,'N'),sizeof(msg_t),IPC_CREAT|0666)) == -1) { 
     perror("shmget() for array_msg"); 

     exit(-1); 
    } 
    if ((content_id = shmget(ftok(FILENAME2,'C'),(strlen(string) + 1),IPC_CREAT|0666)) == -1) { 
     perror("shmget() for array_msg"); 

     exit(-1); 
    } 
    new_msg = (msg_t*)shmat(new_msg_id, NULL,0); 

    char* new_content =(char*)shmat(content_id,NULL,0);// +1 per \0 finale 
    strcpy(new_content, string); 
    printf("here \n %s",(char*)(new_content)); 


//here it seems not working..because then, it can not print anything!! 
    new_msg->content =new_content; 

    printf("here \n %s",(char*)(new_msg->content)); 



    return new_msg; 

我簡單struct msg_t是:

typedef struct msg { 

void* content; // generico contenuto del messaggio 

struct msg * (*msg_init)(void*); // creazione msg 

void (*msg_destroy)(struct msg *); // deallocazione msg 

struct msg * (*msg_copy)(struct msg *); // creazione/copia msg 

} msg_t; 
+0

這是什麼意思? – user244050

+0

始終嘗試發佈可編譯的可運行程序,而不是必須手動完成並組裝的碎片。 –

回答

0

也許你只是不明白第二printf()打印爲%s因爲輸出行緩衝,並只顯示相繼\n被投入stdout。只要可行,最好結束格式字符串\n