文件IO练习1
题目一:
1、使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入
实现代码:
#define LEN_BUF 256int main(int argc, const char *argv[])
{if(argc != 3){fprintf(stderr,"程序入参输入有误\n");return -1;}FILE *src=fopen(argv[1],"r");FILE *dest=fopen(argv[2],"w");if(src==NULL||dest==NULL){fprintf(stderr,"文件打开失败\n");return -1;}char buffer[LEN_BUF];size_t num;while((num=fread(buffer,sizeof(char),LEN_BUF,src))>0){//size_t num=fread(buffer,sizeof(char),LEN_BUF,src);fwrite(buffer,sizeof(char),num,dest);}fclose(src);fclose(dest);printf("文件拷贝完成\n");return 0;
}
运行效果:
ubuntu@ubuntu:~/99-Prac/1015$ ./a.out /etc/passwd passwd
文件拷贝完成
ubuntu@ubuntu:~/99-Prac/1015$ diff /etc/passwd passwd
ubuntu@ubuntu:~/99-Prac/1015$ cat /etc/passwd | wc -l
50
ubuntu@ubuntu:~/99-Prac/1015$ cat passwd | wc -l
50
题目二:
2、使用fgets获取当前文件的总行数
实现代码:
int main(int argc, const char *argv[])
{if(argc != 2){fprintf(stdout, "输入参数有误\n");return -1;}FILE *fp=fopen(argv[1],"r");if(fp == NULL){fprintf(stdout, "文件[%s]打开失败\n", argv[1]);return -1;}//使用fgets统计行数int cnt=0;char buffer[1024];while((fgets(buffer, sizeof(buffer), fp))!=NULL){int len=strlen(buffer);if(buffer[len-1] == '\n')cnt++;}fclose(fp);printf("文件[%s]一共有[%d]行\n", argv[1], cnt);return 0;
}
运行效果:
ubuntu@ubuntu:~/99-Prac/1015$ ./a.out passwd
文件[passwd]一共有[50]行
ubuntu@ubuntu:~/99-Prac/1015$ cat passwd | wc -l
50
题目三:
3、向文件中每一秒打印当前系统时间
实现代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>int main(int argc, const char *argv[])
{FILE *fp=fopen("time.log","w");if(fp == NULL){fprintf(stderr,"文件打开失败\n");return -1;}//每一秒中在终端打印下系统时间time_t curTime;time_t preTime=0;//记录上一次打印的时间int cnt=0;while(1){curTime=time(NULL);if((curTime-preTime)<1){//仍然在1秒以内continue;} preTime=curTime;//打印struct tm* t=localtime(&curTime); fprintf(fp,"行号[%03d] %4d-%02d-%02d %02d:%02d:%02d\n", ++cnt,t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);fflush(fp);}fclose(fp);//虽然永远执行不到return 0;
}
运行效果:
ubuntu@ubuntu:~/99-Prac/1015$ tail -f time.log
行号[001] 2024-10-15 18:57:27
行号[002] 2024-10-15 18:57:28
行号[003] 2024-10-15 18:57:29
行号[004] 2024-10-15 18:57:30
行号[005] 2024-10-15 18:57:31
行号[006] 2024-10-15 18:57:32
行号[007] 2024-10-15 18:57:33
行号[008] 2024-10-15 18:57:34
行号[009] 2024-10-15 18:57:35
行号[010] 2024-10-15 18:57:36
行号[011] 2024-10-15 18:57:37
行号[012] 2024-10-15 18:57:38
行号[013] 2024-10-15 18:57:39
行号[014] 2024-10-15 18:57:40
行号[015] 2024-10-15 18:57:41
行号[016] 2024-10-15 18:57:42