一般情況下利用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 傳回重定向後的檔案絕對路徑