天天看點

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 傳回重定向後的檔案絕對路徑