0
我有這個結構時偏移:MMAP使用結構
typedef struct ip_row {
sem_t row_lock;
char row_name[NAME_SIZE];
char row_address4[NAME_SIZE]; // IPv4 address name
char row_address6[NAME_SIZE]; // IPv6 address name
} ip_row_t;
我想多次使用該結構在共享內存file.I已經驗證了整整一個應用,它的工作原理。
int shmfd; //Shared memory file descriptor
struct ip_row *data;
/*...creating shared memory and map...*/
shmfd = shm_open(shared_memory, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP);
ftruncate(shmfd,FILESIZE);
data = (ip_row_t*)mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd,0);
/*...getting to user inputs, this stuff is in a loop...*/
strcpy(data->row_name,ipstr1);
strcpy(data->row_address6,ipstr2);
strcpy(data->row_address4,ipstr3);
當我再次運行循環,寫作開始於共享內存文件的開頭,覆蓋那兒有什麼了。如何移動偏移量以便我可以支持更多條目到共享內存中?我試過這兩個:
lseek(shmfd,sizeof(struct ip_row_t),SEEK_CUR); //segfault when we write agian
data = (ip_row_t*)mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shmfd,sizeof(struct ip_row_t)); //also segfaults when we try to read
任何意見將不勝感激。 `
「當我再次運行循環。」你沒有顯示一個循環。你說的*是一個循環將相同的(未聲明的)數據複製到相同的字符串中。 – 2014-12-02 20:40:55