用C语言实现一个简单的cat命令
今天老师又留了一个作业,
## cat作业
> 参照系统自带的`cat`实现自己的`cat`命令。
1. 实现`-b`选项:输出文件,对空行不编号
2. 实现`-n`选项:输出文件,对所有行编号
3. 默认情况下:输出文件,不编号
思路:先明确我们都要用到那些系统函数
1.getopt:
作用:获取命令行的参数选项,
2.fopen
作用:打开一个文件
3.fgets
作用:获取文件中的一行
这三个函数都介绍完了,废话不多讲,我们直接上源码
#include<stdio.h>
#include<unistd.h>//引入getopt头文件
#include<stdlib.h>
int bflag, nflag, num;//标记是b还是b 和 行号
void cat_file(const char *);
int main(int argc, char *argv[]) {
char c;
while((c = getopt(argc, argv, "bn")) != -1) {//判断命令行参数 是 -b 还是 -n
switch(c) {
case 'b':
bflag = 1;
break;
case 'n':
nflag = 1;
break;
default :
fprintf(stdout, "Use : %s [-b|-n] file!\n", argv[0]);
exit(1);
}
}
for(int i = optind; i < argc; i++) {//可能有多个文件打印,optind再次调用下一个argv的索引
cat_file(argv[i]);
}
return 0;
}
void cat_file(const char *file) {
FILE *fp;
if((fp = fopen(file, "r")) == NULL) {//判断是不是空文件
//打印错误信息
perror(file);
exit(1);
}
char buff[1024] = {0};
while(fgets(buff, sizeof(buff), fp)) {//按行读取
//都不成立 直接打印
if(!nflag && !bflag) {
printf("%s", buff);
continue;
}
if(buff[0] != '\n'){
num++;
printf("%d\t%s", num, buff);
}else {
//nflag成立 打印行号 不成立 不打印行号
if(nflag && !bflag) {
num++;
printf("%d\t\n", num);
}else {
printf("\n");
}
}
}
fclose(fp);//关闭文件
return ;
}
测试
gcc cat.c
./a.out -n cat.c
测试结果
对你有帮助的同学帮忙点个赞哦!!