实验4 时间与文件 |
时间表示: typedef long time_t; // 实际上是一个32 位长整数 struct timeval{ |
time_t tv_sec; //秒 suseconds_t tv_usec; //微妙 |
} |
获得时间: #include <time.h> |
time_t time(time_t *t);返回时间为epoch 以来的秒数 返回值同时保存在参数t 所指向的变量中 例如 printf(“%u”,time(NULL)); |
毫秒数: typdef long clock_t |
函数原型为clock_t clock(clock_t *) 返回从epoch 以来的毫秒数 |
程序1: #include “stdio.h” #include “stdlib.h” #include “time.h” int main( void ) { longi = 10000000L; clock_t start, finish; |
double duration; |
/* 测量一个事件持续的时间*/ printf( "Time to do %ld empty loops is ", i ); start = clock(); while( i-- ) ; finish = clock(); duration = (double)(finish - start) /CLOCKS_PER_SEC; printf( "%f seconds\n", duration ); system("pause"); |
} |
休眠时间 Sleep 函数,括号内休眠的秒数 #include <unistd.h> unsigned int sleep(unsigned int seconds) |
usleep(unsigned ) |
括号内为指定的微妙数 |
nanosleep(const sturct timespec*, struct timespec *rem) 其中第一个参数指定休眠时间,后面一个参数指定的实际休眠时间 例如程序 Struct timespec req={.tv_sec=0, .tv_nsec=1000} |
Struct time spec rem; nanosleep(&req,&rem); |
间隔定时器 一旦到时间,就会发出信号,由信号处理程序来进行处理。 程序2 #include <stdio.h> #include <unistd.h> #include <signal.h> #include <string.h> |
#include <sys/time.h> #include <errno.h> void PrintMsg(int Num) { printf("%s\n", "Hello World"); return; } int main(int argc, char* argv[]) { signal(SIGALRM, PrintMsg); |
struct itimerval tick; |
tick.it_value.tv_sec = 1; //十秒钟后将启动定时器 tick.it_value.tv_usec = 0; |
tick.it_interval.tv_sec =1; //定时器启动后,每隔1 秒将执行相应的函数 tick.it_interval.tv_usec = 0; |
//setitimer 将触发SIGALRM 信号 int ret = setitimer(ITIMER_REAL, &tick, NULL); if ( ret != 0) { printf("Set timer error. %s \n", strerror(errno) ); |
return -1; |
} printf("Wait!\n"); getchar(); return 0; |
} |
程序3 求目前的时间,然后按照20XX 年XX 月XX 号星期X,点XX 分XX 秒来显示。XX (要求利用localtime 函数来求) 提示先用time(NULL),求当前的秒数,用localtime 函数将当前秒数转换为struct tm 结构体 |
文件 |
如何把一个文件读入,显示到屏幕上? #include <stdio.h> int main() |
{ |
int i; int len; char buf[1024]; FILE *fp=fopen("abc.txt","r"); len=fread(buf,sizeof(char),1024,fp); for(i=0;i<len&&i<1024;i++) printf("%c",buf[i]); printf("\r\n"); fclose(fp); |
} |
按10 次Ctrl+C 就可以恢复缺省的处理方式:即默认退出(SIG_DEF) 上面的程序对与1024 个字节以内的文件是可以的,但是无法处理超过1024 字节的文件 |
可以利用一个while 循环将其逐次读入 #include <stdio.h> int main() { int i; |
int len; char buf[1024]; FILE *fp=fopen("cyg.reg","r"); |
do { |
len=fread(buf,sizeof(char),1024,fp); for(i=0;i<len&&i<1024;i++)printf("%c",buf[i]); }while(len==1024); |
printf("\r\n"); fclose(fp); |
} |
向某个指定文件写入26 个英文字母3 次 |
#include <stdio.h> int main() { int i; int len; char buf[26*3]; |
for(i=0;i<26;i++) { |
buf[i+26]='a'+i; buf[i]= 'a'+i; buf[i+52]='a'+i; } |
FILE *fp=fopen("write.txt","w+"); fwrite(buf,sizeof(char),26*3,fp); fclose(fp); |
} |
本文转自陈仲阳0 51CTO博客,原文链接:http://blog.51cto.com/wolfword/1240340