本文主要实现了linux head命令的-n和-v参数,关于head命令可以参考man手册.
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main(int argc,char *argv[])
{
int ch,nline=10;//默认行数为10行
char buf[N];
while((ch=getopt(argc,argv,"vn:"))!=-1)
{
#ifndef DEBUG
printf("argc-->%d,optind-->%d\n",argc,optind);
#endif
switch(ch)
{
case 'v':
strcpy(buf,argv[argc-1]);
printf("---->%s<----\n",buf);//如果有-v参数则打印文件名
break;
case 'n':
nline=atoi(optarg);//这个选项必须要带参数,把参数的行数转为数字
break;
case '?':
printf("unknown option\n");
exit(1);
}
}
if(optind+1>argc)
{
printf("usage %s [-nv] file\n",argv[0]);
exit(2);
}
FILE* fp;
char str[1024];
fp=fopen(argv[argc-1],"r");
if(fp==NULL)
{
perror("fopen");
exit(2);
}
int i;
for(i=0;i<nline;i++)//读取指定行数的内容输出到标准输出
{
fgets(str,1024,fp);
fputs(str,stdout);
}
fclose(fp);
return 0;
}