1
我完全是Linux內核的新手,所以我可能會混淆。但任何意見將幫助我;)使用SATA硬盤作爲塊設備
我有一個SATA硬盤通過PCIe SATA卡連接,我嘗試使用read
和write
就像一個塊設備。我還希望在硬盤上保存數據電源停電 - 不要緩存。最後,我必須分析在每個linux堆棧層中我會浪費多少時間。但一次只能一步。
此刻我試着open
帶* O_DIRECT *的設備。但我真的不明白我在哪裏可以找到該設備。它顯示爲/dev/sdd
,我創建了一個分區/dev/sdd1
。
open
和read
上的分區/dev/sdd1
的作品。write
失敗* O_DIRECT *(但我相信我有正確的塊大小)open
read
和write
調用/dev/sdd
完全失敗。/dev/
中是否有另一個文件代表我的設備在塊圖層上?- 我的錯誤和錯誤的假設是什麼?
這是我目前的測試代碼
int main() {
int w,r,s;
char buffer[512] = "test string mit 512 byte";
printf("test\n");
// OPEN
int fd = open("/dev/sdd", O_DIRECT | O_RDWR | O_SYNC);
printf("fd = %d\n",fd);
// WRITE
printf("try to write %d byte : %s\n",sizeof(buffer),buffer);
w = write(fd,buffer,sizeof(buffer));
if(w == -1) printf("write failed\n");
else printf("write ok\n");
// RESET BUFFER
memset(buffer,0,sizeof(buffer));
// SEEK
s = lseek(fd,0,SEEK_SET);
if(s == -1) printf("seek failed\n");
else printf("seek ok\n");
// READ
r = read(fd,buffer,sizeof(buffer));
if(r == -1) printf("read failed\n");
else printf("read ok\n");
// PRINT BUFFER
printf("buffer = %s\n",buffer);
return 0;
}
編輯: 我在電源架構與內核3.2的工作 - 如果這是非常重要的。
非常感謝您的寶貴時間, 費邊