文件IO练习1
题目一:
1、使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入
实现代码:
#define LEN_BUF 256
int 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