天天看点

linux 带参重定向,LINUX下main函数获取重定向后的参数

一般情况下利用main()函数自带的特性来进行参数获取

#include

int main(int argc ,char *argv[ ])

{

int i;

for(i=1;i

{

printf("参数是%s\n",argv[i]);

}

printf("参数个数是:%d\n",argc-1);

return 0;

}./a.out asdf asdf

参数是asdf

参数是asdf

参数个数是:2

但是重定向后

./a.out <2.c

参数个数是:0

无法获取2.c

解决:

#include

#include

int main(int argc, char** argv)

{

int fd = fileno(stdin); //int fileno(FILE *stream)用来取得参数stream指定的文件流所使用的文件描述符

char s[256] = {0}, name[256] = {0};

snprintf(s, 255, "/proc/%d/fd/%d", getpid(), fd);

readlink(s, name, 255);

printf("%s\n", name);

return 0;

}

./a.out <2.c /home/ming/2.c 返回重定向后的文件绝对路径