spacer.gif实验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)


spacer.gifusleep(unsigned )

括号内为指定的微妙数

nanosleepconst 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;

}


spacer.gif程序3 求目前的时间,然后按照20XX XX XX 号星期XXX 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


spacer.gif#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);

}