exit函数 2 进程终止
32位整型与上8个1,exit返回的值只有256种,-128到+127
atexit():钩子函数
没有完全释放就结束了,一个一个挂在钩子上
像c++中的析构函数
3 命令行分析实例
常用函数 getopt() getopt_long()【长格式】;shell命令行分析
选项加非选项
ls -l -i -n -a /etc/ /tmp
不仅看当前目录下的文件,也看etc和tmp下的文件。顺序可打乱。命令项也可以连用
ls /etc/ /tmp -lai
cp mydays.c mydate.c
./maydate -y/m/d
--表示选项参数结束 ,后面是非选项传参touch -- -a
perror 全局变量。getopt 关联多个全局变量.
#define FMSTRSIZE 1024
int c; //返回值
char fmtstr[FMTSTRSIZE];
fmtstr[0]='\0';
while(1)
{
c=getopt(argc,argv,"HMSymd");//最后一个参数 optstring
if(c<0)
break;
switch(c)
{
case 'H':
break;
case 'M':
strncat(fmtstr,"%M ",FMTSTRSIZE);
break;
case 'S':
strncat(fmtstr,"%S ",FMTSTRSIZE);
break;
case 'y':
break;
case 'm':
break;
case 'd':
break;
default:
break;
}
}
strftime(timestr,TIMESTRSIZE,fmtstr,tm);
puts(timestr);
exit(0);
查看年份(2位或者4位) 查看小时(不同进制) 带参数的选项
在相应选项后面加上冒号
#define FMSTRSIZE 1024
int c; //返回值
char fmtstr[FMTSTRSIZE];
fmtstr[0]='\0';
while(1)
{
c=getopt(argc,argv,"H:MSy:md");//最后一个参数 optstring
if(c<0)
break;
switch(c)
{
case 'H':
if(strcmp(optarg,"12")==0)
strncat(fmtstr,"%I(%P)",FMTSTRSIZE);
else if(strcmp(optatg,"24")==0)
strncat(fmtstr,"%H",FMTSTRSIZE);
else
fprintf(stderr,"Invalid argument of H\n")
break;
case 'M':
strncat(fmtstr,"%M ",FMTSTRSIZE);
break;
case 'S':
strncat(fmtstr,"%S ",FMTSTRSIZE);
break;
case 'y':
if(strcmp(optarg,"2")==0)
strncat(fmtstr,"%y",FMTSTRSIZE);
else if(strcmp(optarg,"4")==0)
strncat(fmtstr,"%Y",FMTSTRSIZE);
else
fprintf(stderr,"Invalid argument of -y\n");
break;
case 'm':
break;
case 'd':
break;
default:
break;
}
}
strftime(timestr,TIMESTRSIZE,fmtstr,tm);
puts(timestr);
exit(0);
非选项传参可以放在任何地方。前面加一个-号c=getopt(argc,argv,"-H:MSy:md")
返回1值。若指定文件输出到该文件,若没有输出到终端
//初始化
FILE *fp=stdout
while(1)
{
switch(c)
{
case 1:
fp=fopen(argv[optind-1],"w");
if(fp==NULL)
{
perror("fopen()");
fp=stdout;
}
break;
}
}
strncat(fmtstr,"\n",FMTSTRSIZE);
fputs(timestr,fp);
//最后关闭文件
if(fp !=stdout)
fclose(fp);
多个文件 实现先入为主
//初始化
FILE *fp=stdout
while(1)
{
switch(c)
{
case 1://如果不是stdout 管都不用管了
if(fp ==stdout){
fp=fopen(argv[optind-1],"w");
if(fp==NULL)
{
perror("fopen()");
fp=stdout;
}
}
break;
}
}
strncat(fmtstr,"\n",FMTSTRSIZE);
fputs(timestr,fp);
//最后关闭文件
if(fp !=stdout)
fclose(fp);