用C语言验证伪随机数据

用C语言验证伪随机数据,c,random,io,openmp,C,Random,Io,Openmp,我正在编写一个磁盘练习程序,我希望能够生成一些随机数据来填充缓冲区,将其写入磁盘,然后在将数据读回内存后验证数据是否“正确” 我之所以要生成随机数据,是因为要将不同的位模式写入磁盘。目前,我正在重复使用单个字符填充缓冲区 buf = (char *)malloc(sizeof(char) * buffer_size); for(i=0;i<buffer_size;i++) { buf[i] = 'W'; } buf=(char*)mal

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

我之所以要生成随机数据,是因为要将不同的位模式写入磁盘。目前,我正在重复使用单个字符填充缓冲区

    buf = (char *)malloc(sizeof(char) * buffer_size);
    for(i=0;i<buffer_size;i++)
    {
          buf[i] = 'W';
    }
buf=(char*)malloc(sizeof(char)*缓冲区大小);
对于(i=0;i文件大小/数据->缓冲区大小;
#pragma omp并行专用(tid、start、stop、字节、totalTime)缩减(+:mbPerSec)
对于(i=0;inum_线程;i++)
{  
tid=omp_get_thread_num();
对于(j=0;jdescriptors[tid],data->out\u buf,data->buffer\u size);
stop=omp_get_wtime();
totalTime=totalTime+(停止-启动);
}
mbPerSec=字节/MB_乘数/totalTime;
}
printf(“写入%.fmb/secs\n”,mbPerSec);
}
readData函数与此类似,但从文件描述符读取到缓冲区中。我是否可以运行任何算法或转换来生成许多不同的位模式,然后在将它们读回内存时对其进行验证?感谢是advance!

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


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

您可以使用
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" );
#定义测试长度512
int i;
char testBuff[TEST_LEN];
char readBuff[测试];
srand(时间(空));
对于(i=0;i
@mattwolfe16是的,如果你放入相同的种子,你将得到完全相同的数字序列。最好的办法是,rand()从大量未排序的数字数组中提取一个数字,每次读取都会使索引递增,srand()设置你开始读取的索引。因此,如果我要设置srand()的种子值在read函数中,与我在write函数中所做的相同,每个函数中对rand()的调用在每次迭代中都是相同的?-writeData()readData()-Seed:6543 6543-1:rand()=567 rand()=567-2:rand()=1264 rand()=1264-3:rand()=33 rand()=33-…@Daboyzuk-很抱歉,我试图将我的评论格式设置得稍微好一点,但没有效果。是的,因此您将只调用
srand()
两次。但您将调用
rand()
很多次。这不是最好的主意。如果缓冲区足够小,数据可以驻留在设备或操作系统的缓存中。@Akisuikonen在这种情况下,我不会担心缓存,因为我正在使用O_DSYNC标志写入/读取数据,以便在数据存在于磁盘上之前不会返回系统调用。
#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" );