Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59354
  • 博文数量: 9
  • 博客积分: 209
  • 博客等级: 入伍新兵
  • 技术积分: 117
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-09 18:50
文章分类

全部博文(9)

文章存档

2012年(4)

2011年(5)

我的朋友

分类: C/C++

2012-04-03 11:12:50

对于Linux下的程序员来说,命令行参数是再常见不过的了,但是对于命令行参数的具体传递方式,我一直不是很明白,做了一个测试,代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. /*
  4.  * Author : Ahfyth
  5.  */


  6. int main( int argc, char *argv[], char *env[] )
  7. {
  8.         if( argc < 2 )
  9.         {
  10.                 printf( "\nUsage : %s \n", argv[0] );
  11.                 printf( "\nThis program is designed to test the args.\n\n");
  12.                 return 1;
  13.         }

  14.         unsigned int i;
  15.         for( i=0; i<argc; ++i )
  16.         {
  17.                 printf( "Arg %d : %s\n", i, argv[i] );
  18.         }
  19.         if( argv[argc] == NULL )
  20.                 printf( "Arg %d == NULL : success.\n", argc );
  21.         else
  22.                 printf( "Arg %d == NULL : fail.\n", argc );

  23.         if( env == argv+argc+1 )
  24.                 printf( "env == argv+argc+1 : success.\n" );
  25.         else
  26.                 printf( "env == argv+argc+1 : fail.\n" );

  27.         i = 0;
  28.         while( 1 )
  29.         {
  30.                 if( env[i] == NULL )break;

  31.                 printf( "Env %d : %s\n", i, env[i] );
  32.                 ++ i;
  33.         }

  34.         return 0;
  35. }
输出结果如下:

./test a b c

(较长的行做了一些删减)

点击(此处)折叠或打开

  1. Arg 0 : ./test
  2. Arg 1 : a
  3. Arg 2 : b
  4. Arg 3 : c
  5. Arg 4 == NULL : success.
  6. env == argv+argc+1 : success.
  7. Env 0 : BIOROLL=/opt/bio
  8. Env 1 : HOSTNAME=compute-0-11.local
  9. Env 2 : TERM=xterm
  10. Env 3 : SHELL=/bin/bash
  11. Env 4 : HISTSIZE=1000
  12. Env 5 : HMMER_DB=/home/ahfyth/bio/hmmer/db
  13. Env 6 : SSH_CLIENT=192.168.50.51 57413 22
  14. Env 7 : SGE_CELL=default
  15. Env 8 : SGE_ARCH=lx26-amd64
  16. Env 9 : MPICH_PROCESS_GROUP=no
  17. Env 10 : OLDPWD=/ifs-accel/ahfyth
  18. Env 11 : SSH_TTY=/dev/pts/0
  19. Env 12 : ANT_HOME=/opt/rocks
  20. Env 13 : USER=ahfyth
  21. Env 14 : LD_LIBRARY_PATH=/opt/gridengine/lib/lx26-amd64
  22. Env 15 : LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:
  23. Env 16 : ROCKS_ROOT=/opt/rocks
  24. Env 17 : MAIL=/var/spool/mail/sunkun
  25. Env 18 : PATH=/usr/java/latest/bin:/usr/local/bin:/bin:/usr/bin
  26. Env 19 : INPUTRC=/etc/inputrc
  27. Env 20 : PWD=/x200ifs-accel/program
  28. Env 21 : JAVA_HOME=/usr/java/latest
  29. Env 22 : SGE_EXECD_PORT=537
  30. Env 23 : LANG=en_US.iso885915
  31. Env 24 : SGE_QMASTER_PORT=536
  32. Env 25 : SGE_ROOT=/opt/gridengine
  33. Env 26 : BLASTDB=/home/ahfyth/bio/ncbi/db
  34. Env 27 : CS=/ifs-accel/program/Chip_seq/DownStream
  35. Env 28 : HISTCONTROL=ignoredups
  36. Env 29 : SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
  37. Env 30 : SHLVL=1
  38. Env 31 : HOME=/home/sunkun
  39. Env 32 : PYTHONPATH=/ifs-accel/ahfyth/software
  40. Env 33 : LOGNAME=sunkun
  41. Env 34 : SSH_CONNECTION=192.168.50.51 57413 192.168.50.81 22
  42. Env 35 : LESSOPEN=|/usr/bin/lesspipe.sh %s
  43. Env 36 : BLASTMAT=/opt/bio/ncbi/data
  44. Env 37 : DISPLAY=localhost:10.0
  45. Env 38 : HISTTIMEFORMAT=%F %T
  46. Env 39 : G_BROKEN_FILENAMES=1
  47. Env 40 : _=./test

重点在第5行和第6行,也就是说命令行的参数argv和env是连接在一起的,中间只隔了一个NULL。
即使没有参数传进来,由于env一般较多(这里有40个),强制访问argv[10]一类的也是有值的!


阅读(1046) | 评论(0) | 转发(0) |
0

上一篇:linux sort 多字段排序

下一篇:Bash 数组使用

给主人留下些什么吧!~~