您好,登錄后才能下訂單哦!
//這是一個在參數指定文件中連續寫入當前時間的應用 //每隔1分鐘在當前目錄下建立一個新文件,通過tm_sec是否為0來判斷 //文件以1秒為時間間隔,將當前的時間寫入文件,然后回車換行 #include <fcntl.h> #include <stdio.h> #include <string.h> #include <sys/time.h> #include<time.h> int main(int argc,char *argv[]) { time_t filetime;//時間結構體對象 struct tm *p;//時間結構體指針 int temp,seektemp; //偏移量計算中間量 int fd; //文件描述符 char writebuf[50]; //寫字符串緩沖區 char filenamebuf[10] = "File"; //文件名稱緩沖區 char timebuf[6]; //時間緩沖區 struct timeval timenow,timeold; //時間變量 struct timezone timez; int j = 0; int writeCounter = 0; //寫入計數器 if(argc!= 1) //如果參數錯誤 { printf("Plz input the corrcet file name as './exam39lseekFun filename string'!\n"); return 1; //如果參數不正確則退出 } gettimeofday(&timeold,&timez); //取得一個時間信息作為參考時間信息 time(&filetime);//獲得時間參數 p = localtime(&filetime);//獲得時分秒參數,以供創建新文件 sprintf(timebuf,"%02d%02d%02d",p->tm_hour,p->tm_min,p->tm_sec); strcat(filenamebuf,timebuf);//創建文件名 strcat(filenamebuf,".txt"); fd=open(filenamebuf,O_RDWR|O_CREAT,S_IRWXU);//創建文件 // fd = open(*(argv+1),O_RDWR|O_CREAT,S_IRWXU); //打開文件如果沒有則創建 while(1) //進入主循環 { while(1) //1毫秒延時判斷 { gettimeofday(&timenow,&timez); //獲取當前時間參數 time(&filetime);//獲得時間參數 p = localtime(&filetime);//獲得時分秒參數,以供創建新文件 sprintf(timebuf,"%02d%02d%02d",p->tm_hour,p->tm_min,p->tm_sec); //printf("%d:%d:%d\n",p->tm_hour,p->tm_min,p->tm_sec); //時分秒信息放入timebuf緩沖區備用 //gettimeofday(&timenow,&timez); //獲取當前時間參數 if((timenow.tv_sec - timeold.tv_sec) == 1) //如果到達一秒 { timeold = timenow; //更新保存的時間信息 printf("%d:%d:%d\n",p->tm_hour,p->tm_min,p->tm_sec); //printf("p->tm_sec:%02d\n",p->tm_sec); break; //1秒時間到,退出 } } if(p->tm_sec==0)//如果是0秒,到1分鐘了 { char filenamebuf[]= "File"; strcat(filenamebuf,timebuf);//創建文件名 strcat(filenamebuf,".txt"); fd=open(filenamebuf,O_RDWR|O_CREAT,S_IRWXU);//創建文件 writeCounter=0; printf("new filename %s\n",filenamebuf); } time(&filetime); //獲得當前時間參數 sprintf(writebuf,"%s",ctime(&filetime)); //將當前時間參數放入寫緩沖區 printf("%s",&writebuf); //在屏幕上打印單簽writebuf的內容 if(writeCounter == 0) //第一次寫入 { temp = write(fd,writebuf,strlen(writebuf)); //寫入數據 seektemp = lseek(fd,0,SEEK_CUR); //獲得當前的偏移量 writeCounter++; //寫入計數器++ } else { j = strlen(writebuf) * writeCounter; //獲得偏移量 seektemp = lseek(fd,j,SEEK_SET); temp = write(fd,writebuf,strlen(writebuf)); writeCounter++; } } close(fd); return 0; }
已上機測試
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。