2011年11月22日星期二

linux chapter4

environment
很多工具程序有命令行参数,如 ls -l中的"-l"
处理这种命令行选项有个函数 getopt,定义如下
#include<unistd.h>
int getopt(int argc,const char * argv[],const char *optstring);
extern char *optarg;
extern int optind,oprerr,optopt;
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
    int flags, opt;
    int  tfnd;
char *nsecs;
  
    tfnd = 0;
    flags = 0;
    while ((opt = getopt(argc, argv, "nt:")) != -1) {
        switch (opt) {
        case 'n':
            flags = 1;//printf("scan n\n");
            break;
        case 't':
            nsecs = optarg;printf("nsecs %s\n",nsecs);
            tfnd = 1;
            break;
        default: /* '?' */
            fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
                    argv[0]);
            exit(EXIT_FAILURE);
        }
    }

   printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind);

   if (optind >= argc) {
        fprintf(stderr, "Expected argument after options\n");
        exit(EXIT_FAILURE);
    }

   printf("name argument = %s\n", argv[optind]);

   /* Other code omitted */

   exit(EXIT_SUCCESS);
}

在C中读写环境变量,getenv,putenv
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
int main(int argc,char *argv[]){
char *value,*var;
char var1[1000];
if(argc==1||argc>3){
fprintf(stderr,"usage:env var [value]\n");
exit(1);
}
var=argv[1];
strcpy(var1,var);
value=getenv(var);
if(value)///不是NULL
printf("variable %s is %s\n",var,value);
else
printf("variable %s no value\n",var);
if(argc==3)
{
value=argv[2];
strcat(var1,"=");
strcat(var1,value);
putenv(var1);
value=getenv(var);
if(value)///不是NULL
printf("variable %s is %s\n",var,value);
else
printf("variable %s no value\n",var);
}
exit(0);
}

没有评论:

发表评论