我需要在C中找到脚本的启动位置。我必须检查我的脚本是从/ usr / bin还是从另一个目录启动的。我尝试过get_current_directory_name(),但是当我启动脚本时它会返回我浏览的当前路径,所以如果我这样做: cd / home / myaccount /&&我的脚本 它返回/ home / myaccount,但我需要的是启动位置。
答案 0 :(得分:6)
readlink("/proc/self/exe", buffer, buffer_size)
这将为您提供Linux下可执行文件的位置。 man 2 readlink
如果您不使用Linux,可以尝试检查argv[0]
并查看这是否是当前正在运行的程序的位置,但完全可以运行与argv[0]
不同的程序。该计划的途径;它可以是可执行文件名,相对路径,甚至可以与正在运行的程序完全没有任何关系。
确定这一点的最后一个努力可能是在PATH
中搜索该程序,并假设如果它在那里那就是它的运行方式。不过,我不会非常信任。
最好的解决方案是不要编写依赖此类信息的程序。
答案 1 :(得分:0)
好的,cd /home/myaccount
会在启动my-script
之前更改当前目录,这意味着my-script
将无法知道它最初的位置。也许您可以查看OLDPWD
环境变量,但这不会告诉您是否在运行my-script
之前或之前的很长一段时间内切换了dir。
或许我误解了你。也许您正在寻找argv [0]?
int main(int argc, char *argv[]) {
printf("%s\n", argv[0]);
}
答案 2 :(得分:0)
法比奥,
如果您运行'C脚本',那么您有一个已执行(即时解释或编译)此.c源代码文件的进程。
当您尝试识别“脚本的起点或来源”时,您将找到父进程路径和名称。
无法从源代码文件的位置执行C脚本 - 除非父进程实际上将C源代码文件编译成可执行文件(然后可以存储)在父进程有权访问的任何地方)。
希望澄清这个问题。
答案 3 :(得分:-1)
除了argv [0],你可以尝试getcwd()来获取路径