《unix环境高级编程》作业题,实现uname
#include "apue.h"
#include <sys/utsname.h>
#include <stdio.h>
int
main(int argc,char *argv[])
{
struct utsname *name=malloc(1);
char *buf=malloc(MAXLINE);
int i,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);
}