main()の引数
本連載では、
int main(int argc, char *argv[])
のように引数が付けられて呼び出されます。main()の引数の中には、
int argc ← コマンドライン上の引数の個数
char *argv[] ← コマンドライン上の引数の文字列の配列
リストA1.
#include <stdio.h>
int
main(int argc, char *argv[])
{
int i;
for (i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}
$ gcc -O2 -o all_args all_args.c $ ./all_args argv[0] = ./all_args $ $ ./all_args -o outfile -i infile argv[0] = ./all_args argv[1] = -o argv[2] = outfile argv[3] = -i argv[4] = infile $
さらにUNIX環境では*argv[]のあとに*envp[]という引数が付けられて、
int main(int argc, char *argv[], *envp[])
という形でmain()関数が呼び出されます。この*envp[]の中には、
環境変数をすべて表示するプログラムの例をリストA1.
なお、
#include <stdio.h>
int
main(int argc, char *argv[], char *envp[])
{
int i;
for (i = 0; envp[i] != NULL; i++) {
printf("envp[%d] = %s\n", i, envp[i]);
}
return 0;
}
$ gcc -O2 -o all_envs all_envs.c $ ./all_envs envp[0] = CC=gcc envp[1] = CFLAGS=-O2 envp[2] = DISPLAY=:0.0 envp[3] = HOME=/home/yamamori envp[4] = LANG=ja_JP.eucJP … 省略 … $
ファイル名を指定して開く
前回作成した簡易catコマンドのプログラムのmycat.
mycat.
なお、
#include <stdio.h>
int
main(int argc, char *argv[])
{
int c;
if (argc > 1) {
if (freopen(argv[1], "r", stdin) == NULL) {
perror(argv[1]);
return 1;
}
}
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
mycat_
$ gcc -O2 -o mycat_freopen mycat_freopen.c $ ./mycat_freopen mycat_freopen.c #include <stdio.h> int main(int argc, char *argv[]) … 省略 … $
mycat_
$ ./mycat_freopen testfile.txt testfile.txt: No such file or directory $
さらにargv[]すべてのファイルついて次々にopenし、