uname(1)的基本实现(C语言)

来源:互联网 发布:生产制造业erp软件 编辑:程序博客网 时间:2024/06/06 02:54

       今天看《unix环境高级编程》里面的一道作业题,实现uname(1),所以自己就动手敲了代码,主要是利用uname函数返回一个结构的指针,然后一一解读结构指针的内容,这个实现还包括参数的配合,用户可以选择参数来输出想要的内容,还可以配合-h参数来输出帮助信息呢。这段代码虽然简单,但是完成后还是挺开心,突然就有个想法,以后要慢慢把Linux上的命令用C语言来实现,加油,我可以的。下面是代码:

/*********************************************************** Program:example for uname(1). History:2013/05/20dingdongFirst release************************************************************/#include "apue.h"#include <sys/utsname.h>#include <stdio.h>intmain(int argc,char *argv[]){struct utsname*name=malloc(1);char*buf=malloc(MAXLINE);inti,j,k=0,flag=0;/*i,j for argv,k for buf,flag for error*/if(uname(name)==-1)err_sys("uname error");for(i=1;i<argc;i++){for(j=0;argv[i][j]!='\0';j++){if(argv[i][j]!='-')/*collect the parameters*/{buf[k]=argv[i][j];k++;}}}buf[k]='\0';for(k=0;buf[k]!='\0';k++){switch(buf[k]){case 's':printf("%s ",name->sysname);break;case 'n':printf("%s ",name->nodename);break;case 'r':printf("%s ",name->release);break;case 'v':printf("%s ",name->version);break;case 'm':printf("%s ",name->machine);break;case 'a':printf("%s %s %s %s %s",name->sysname,name->nodename,name->release,name->version,name->machine); break;case 'h':printf("***************************************\n"); printf("* Parameters            Function      *\n"); printf("*     -s           print the sysname  *\n"); printf("*     -n           print the nodename *\n"); printf("*     -r           print the release  *\n"); printf("*     -v           print the version  *\n"); printf("*     -m           print the machine  *\n"); printf("*     -a           print all of above *\n"); printf("***************************************\n"); break;default: flag=1; printf("%s: extra operand %s\n",argv[0],argv[1]); printf("Try 'uname -h' for more information.\n"); break;}if(flag)break;/*if have extra patameters then break.*/}printf("\n");exit(0);}





原创粉丝点击