時,我有一個簡單的程序去這樣的:總線錯誤(核心轉儲)使用的strcpy到mmap'ed文件
int main(void) {
int fd;
const char *text = "This is a test";
fd = open("/tmp/msyncTest", (O_CREAT | O_TRUNC | O_RDWR), (S_IRWXU | S_IRWXG | S_IRWXO));
if (fd < 0) {
perror("open() error");
return fd;
}
/* mmap the file. */
void *address;
off_t my_offset = 0;
address = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, fd, my_offset);
if (address == MAP_FAILED) {
perror("mmap error. ");
return -1;
}
/* Move some data into the file using memory map. */
strcpy((char *)address, text);
/* use msync to write changes to disk. */
if (msync(address, 4096 , MS_SYNC) < 0) {
perror("msync failed with error:");
return -1;
}
else {
printf("%s","msync completed successfully.");
}
close(fd);
unlink("/tmp/msyncTest");
}
什麼錯我的代碼?我做了一些簡單的測試,看起來問題來自strcpy
。但根據定義,我認爲沒有問題。
你沒有顯示如何檢查'fd';如何設置'len'和'my_offset';你如何檢查'mmap()'調用。我們可以猜測與那些相關的東西導致代碼失敗。 –
@JonathanLeffler好吧,我會發布所有的代碼。 – HuangJie
我們只需要看到一個MCVE([如何創建一個最小,完整和可驗證的例子?](http://stackoverflow.com/help/mcve)) - 這可能是另外10行左右。 –