2

我正在编写一个磁盘练习程序,我希望能够生成一些随机数据来填充缓冲区,将其写入磁盘,然后在将数据读回内存后验证数据是否“正确”。

我想生成随机数据的原因是有不同的位模式被写入磁盘。目前我正在用一个字符重复填充缓冲区。

    buf = (char *)malloc(sizeof(char) * buffer_size);
    for(i=0;i<buffer_size;i++)
    {
          buf[i] = 'W';
    }

writeData 函数使用 'W' 重复写入缓冲区,直到达到文件大小:

    void* writeData(Data *data) 
    {
        int i,
        j,
        tid;

         double bytes=0,
            start=0,
            stop=0,
            totalTime=0,
            mbPerSec=0;

         double iterations = data->file_size/data->buffer_size;

         #pragma omp parallel for private(tid,start,stop,bytes,totalTime) reduction(+:mbPerSec)
         for(i=0;i<data->num_threads;i++)
         {  
              tid = omp_get_thread_num();
              for(j=0;j<iterations;j++)
              { 
               start = omp_get_wtime();
               bytes += write(data->descriptors[tid],data->out_buf,data->buffer_size);
               stop = omp_get_wtime();
               totalTime = totalTime + (stop - start);
              }
              mbPerSec = bytes/MB_MULTIPLIER/totalTime;
         }
         printf("Write %.f MB/secs\n",mbPerSec);    
    }

readData 函数类似,但从文件描述符读取到缓冲区。是否可以运行任何算法或转换来生成许多不同的位模式,然后在将它们读回内存时对其进行验证?谢谢是提前!

4

2 回答 2

4

您可以使用rand()函数将随机值写入磁盘。但请记住使用将种子设置为已知值srand()

在读取函数中,使用srand()(到已知值)重置种子并rand()再次调用。将此与从磁盘读取的值进行比较。

于 2013-04-24T12:51:53.847 回答
2

您可以使用rand()或不使用已知种子预填充缓冲区,将缓冲区写入磁盘,从磁盘读取到第二个缓冲区,然后用于memcmp()验证两个缓冲区是否仍然匹配,冲洗并重复。

#define TEST_LEN 512

int i;
char testBuff[TEST_LEN];
char readBuff[TEST_LEN];

srand( time( NULL ) );

for( i = 0; i < TEST_LEN; i++ )
    testBuff[i] = (char)(rand() & 0xFF);

WriteToDisk( testBuff, TEST_LEN );
ReadFromDisk( readBuff, TEST_LEN );

if( memcmp( testBuff, readBuff, TEST_LEN ) )
    printf( "That's not good!\n" );
于 2013-04-24T12:53:11.327 回答