获得创业地位

时间:2010-08-26 14:00:27

标签: c

我需要在C中找到脚本的启动位置。我必须检查我的脚本是从/ usr / bin还是从另一个目录启动的。我尝试过get_current_directory_name(),但是当我启动脚本时它会返回我浏览的当前路径,所以如果我这样做: cd / home / myaccount /&&我的脚本 它返回/ home / myaccount,但我需要的是启动位置。

4 个答案:

答案 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()来获取路径