gettimeofday

gettimeofday

gettimeofday

تابع ()gettimeofday ، مقدار زمان در حال حاضر سیستم را به ما برمی گرداند .

این مقدار برگشتی از دو مقدار integer تشکیل شده است که شامل ثانیه ها از اول ژانویه سال ۱۹۷۰ و

مقدار میکروثانیه  می باشد . 

در این مقاله برنامه ای با زبان C نوشته ایم که از تابع gettimeofday  استفاده کرده است و در این برنامه از

دستور sleep  برای اینجاد وقفه به مدت ۲۰۰ ثانیه استفاده شده است و بوسیله تابع gettimeofday

می خواهیم مقدار زمانی که این ۲۰۰ ثانیه وقفه به انجام میرسد را نمایش دهیم .  

از تابع gettimeofday  می توانیم برای نمایش میزان زمانی که برای نوشتن یا خواندن از یک فایل صرف میشود

نیز استفاده نمود .


sampletime.c

۱        #include <stdio.h>
۲        #include <sys/time.h>

۳         struct timeval start, finish ;
۴          int msec;

۵          int main ()
۶          {
۷               gettimeofday (&start, NULL);

۸                 sleep (200); /* wait ~ 200 seconds */

۹                 gettimeofday (&finish, NULL);

۱۰               msec = finish.tv_sec * 1000 + finish.tv_usec / 1000;
۱۱               msec -= start.tv_sec * 1000 + start.tv_usec / 1000;

۱۲                printf(“Time: %d milliseconds\n”, msec);
۱۳             }


به منظور کامپایل کردن برنامه بالا از دستور زیر استفاده می کنیم :

gcc sampletime.c -o sampletime

خروجی برنامه در فایلی بنام sampletime ذخیره میشود و چنانچه این برنامه را اجرا کنیم خروجی زیر

ظاهر میشود :

./sampletime

time  ۲۰۰۰۰۹ miliseconds

این خروجی می گوید که برای دستور sleep  به مدت ۲۰۰ ثانیه ؛ به اندازه ۲۰۰۰۰۹ میلی ثانیه زمان صرف

شده است . 

در برنامه زیر یک Pseudocode  به منظور برآورد میزان زمانی که کد نوشتن طول میکشد نوشته ایم :


/* get time of day before writing */
if ( gettimeofday( &tp_start, NULL ) == -1 )
{
/* error message gettimeofday failed */
}
/* calculate elapse_time_start */
/* write to disk */
for ( i = 0; i < count; i++ )
{
if ( write( fd, buf, buf_size ) == 0 )
{
/* error message write failed */
}
}
/* get time of day after write */
if ( gettimeofday( &tp_end, NULL ) == -1 )
{
/* error message gettimeofday failed */
}
/* calculate elapse_time_new */
elapse_time = elapse_time_new – elapse_time_start;
/* compute throughput */
printf( “elapse time for write: %d \n”, elapse_time );


در برنامه بالا ابتدا قبل از ننوشتن روی دیسک تابع gettimeofday صدا زده میشود تا زمان شروع محاسبه

گردد و بعد از نوشتن روی دیسک دوباره تابع gettimeofday صدا زده میشود تا زمان انتهای نوشتن محاسبه

گردد و سپس از روی آن elapse time محاسبه می گردد.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *