static const int MAX_BUFFER_LEN = 1024*12; //in byets
char *bff = new char[MAX_BUFFER_LEN];
int fileflag = O_CREAT | O_WRONLY | O_NONBLOCK;
fl = open(filename, fileflag, 0666);
if(fl < 0)
{
printf("can not open file! \n");
return -1;
}
do
{
///begin one loop
struct timeval bef;
struct timeval aft;
gettimeofday(&bef, NULL);
write(fl, bff, MAX_BUFFER_LEN);
gettimeofday(&aft, NULL);
if(aft.tv_usec - bef.tv_usec > 20000) //ignore second condition
{
printf(" cost too long:%d \n", aft.tv_usec - bef.tv_usec);
}
//end one loop
//sleep
usleep(30*1000); //sleep 30ms
}while(1);
当我在 Linux ubuntu 2.6.32-24-generic 上运行程序时,我发现 COST TOO LONG 打印在一分钟内显示 1~2 次。我尝试了U盘和硬盘。我也在arm平台上尝试了这个程序。这种情况也发生了。我认为 3.2Mbps 对于低速 IO 设备来说太高了。所以我降低到0.4Mbps。它显着降低了打印频率。有什么办法可以控制时间成本吗?write() 只是将数据复制到 kenal 缓冲区并立即返回还是等待磁盘 IO 完成?kenal IO缓冲区是否已满并且必须等待刷新但为什么只有几次花费这么长时间?