Возвращаемые значения fread и fwrite не соответствуют выводу blktrace

Я провожу некоторый эксперимент с твердотельными накопителями, чтобы проверить погоду, в которой происходит потеря данных при сбое питания На первом шаге я записываю случайные данные на твердотельный накопитель, а затем на следующем шаге вводю в него сбой питания. В конце я читаю с SSD и проверяю, совпадают ли данные с данными, которые я написал до сбоя питания. К сожалению, все тесты прошли без потери данных.

Вот пример кода для моего эксперимента.

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <unistd.h>
using namespace std;

int main()
{
FILE *fp = fopen("/dev/sdb", "rb+");

char* writeBuffer = (char*) malloc(4096 * 16 * sizeof(char));
char* readBuffer = (char*) malloc(4096 * 16 * sizeof(char));

for(int i = 0; i < 4096 * 16; i++)
readBuffer[i] = rand() % 256;

fseeko64(fp, (unsigned long long int) 6107552 * 4096, SEEK_SET);
int writeBytes = fwrite((void*) writeBuffer, sizeof(char), 4096 * 16, fp);

sleep(2); // power fault injection

fseeko64(fp, (unsigned long long int) 6107552 * 4096, SEEK_SET);
int readBytes = fread((void*) readBuffer, sizeof(char), 4096 * 16, fp);

cout << "Write Bytes : " << writeBytes
<< "    Read Bytes : " << readBytes << endl;

fclose(fp);
return 0;
}

Я выполнил код выше во время работы blktrace на /dev/sdb, Я получил следующий результат. fread() не имеет следов в blktrace выход.

  blktrace -d /dev/sdb -o - | blkparse -i -
8,16   3        1     0.000000000    74  Q   W 48860416 + 8 [kworker/u16:1]
8,16   3        2     0.000005829    74  G   W 48860416 + 8 [kworker/u16:1]
8,16   3        3     0.000007357    74  P   N [kworker/u16:1]
8,16   3        4     0.000010943    74  Q   W 48860424 + 8 [kworker/u16:1]
8,16   3        5     0.000012601    74  M   W 48860424 + 8 [kworker/u16:1]
8,16   3        6     0.000014427    74  Q   W 48860432 + 8 [kworker/u16:1]
8,16   3        7     0.000014899    74  M   W 48860432 + 8 [kworker/u16:1]
8,16   3        8     0.000016525    74  Q   W 48860440 + 8 [kworker/u16:1]
8,16   3        9     0.000016780    74  M   W 48860440 + 8 [kworker/u16:1]
8,16   3       10     0.000018818    74  Q   W 48860448 + 8 [kworker/u16:1]
8,16   3       11     0.000019168    74  M   W 48860448 + 8 [kworker/u16:1]
8,16   3       12     0.000022649    74  Q   W 48860456 + 8 [kworker/u16:1]
8,16   3       13     0.000022929    74  M   W 48860456 + 8 [kworker/u16:1]
8,16   3       14     0.000024345    74  Q   W 48860464 + 8 [kworker/u16:1]
8,16   3       15     0.000024682    74  M   W 48860464 + 8 [kworker/u16:1]
8,16   3       16     0.000025933    74  Q   W 48860472 + 8 [kworker/u16:1]
8,16   3       17     0.000026205    74  M   W 48860472 + 8 [kworker/u16:1]
8,16   3       18     0.000027480    74  Q   W 48860480 + 8 [kworker/u16:1]
8,16   3       19     0.000027803    74  M   W 48860480 + 8 [kworker/u16:1]
8,16   3       20     0.000029141    74  Q   W 48860488 + 8 [kworker/u16:1]
8,16   3       21     0.000029416    74  M   W 48860488 + 8 [kworker/u16:1]
8,16   3       22     0.000030519    74  Q   W 48860496 + 8 [kworker/u16:1]
8,16   3       23     0.000030856    74  M   W 48860496 + 8 [kworker/u16:1]
8,16   3       24     0.000032865    74  Q   W 48860504 + 8 [kworker/u16:1]
8,16   3       25     0.000033172    74  M   W 48860504 + 8 [kworker/u16:1]
8,16   3       26     0.000034933    74  Q   W 48860512 + 8 [kworker/u16:1]
8,16   3       27     0.000035258    74  M   W 48860512 + 8 [kworker/u16:1]
8,16   3       28     0.000036723    74  Q   W 48860520 + 8 [kworker/u16:1]
8,16   3       29     0.000037081    74  M   W 48860520 + 8 [kworker/u16:1]
8,16   3       30     0.000044758    74  Q   W 48860528 + 8 [kworker/u16:1]
8,16   3       31     0.000045026    74  M   W 48860528 + 8 [kworker/u16:1]
8,16   3       32     0.000046789    74  Q   W 48860536 + 8 [kworker/u16:1]
8,16   3       33     0.000047079    74  M   W 48860536 + 8 [kworker/u16:1]
8,16   3       34     0.000048702    74  I   W 48860416 + 128 [kworker/u16:1]
8,16   3       35     0.000050392    74  U   N [kworker/u16:1] 1
8,16   3       36     0.000052170    74  D   W 48860416 + 128 [kworker/u16:1]
8,16   2        1     0.000885952     0  C   W 48860416 + 128 [0]

Как я могу отключить чтение из буфера?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …