我正在编写一个C程序,它确定从标准输入读取的字节数。一世 发现有方法可以为程序提供输入
如何从shell中找到执行程序的确切命令。 我尝试使用命令行参数但失败了。
#include <stdio.h>
int main(int argc,char *argv[])
{
char buffer[100];
int n;
for(n=1;n<argc;n++)
printf("argument: %s\t",argv[n]);
printf("\n");
if(argc==1)
printf("waiting for input :");
else if (argc==3)
printf("Not waiting for input . Got the source from command itself .");
n = read(0,buffer,100);
if(n==-1)
printf("\nError occured in reading");
printf("\nReading successfully done\n");
return 0;
}
另外,
答案 0 :(得分:1)
一般情况下,你不能在你的程序中执行此操作 - shell可能不会将一些参数传递给你。在你的程序运行或获得参数之前,它将有扩展的全局,完成I / O重定向等等。
您可以尝试呼叫ps -o args
,这可能会对您有所帮助。据我所知,它不会给出重定向。
答案 1 :(得分:0)
你有一些选项,检查argv以查看它是如何被调用的(argv [0]告诉它是否被调用为完整路径,相对路径,当前目录或使用$ PATH基于先前/ s .s或缺少它)
您可以使用以下内容获取调用它的父进程:
sprintf(buf,"/proc/%d/cmdline",getppid());
fd=open(buf,O_RDONLY);
read(fd,buf,buf_size);
write(1,buf,strlen(buf));
你也可以使用上面的getpid从/ proc / pid / ...获取当前命令的其他信息(不是getppid)
获得父进程后,您可以采取更多操作。例如,如果父级的基本名称为sh或bash,则可以打开并读取历史记录文件,然后查找应用程序的出现位置。这将显示调用它的完整命令。其他应用程序可能具有类似的历史文件。