Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在应用程序包[macOS]中查找C中的当前目录_C_Macos_Perl - Fatal编程技术网

如何在应用程序包[macOS]中查找C中的当前目录

如何在应用程序包[macOS]中查找C中的当前目录,c,macos,perl,C,Macos,Perl,我们有一个应用程序包,它的主要可执行文件是用Perl编写的,并用pp打包的。不幸的是,这个可执行文件阻止我们对.app进行代码设计。显然,使用pp创建的可执行文件不能进行代码签名。为了允许代码签名,我们希望将主可执行文件从其默认文件夹“MacOS”移动到“Resources”文件夹,因为该文件夹似乎可以托管用于代码签名的可执行文件,并创建一个将运行该可执行文件的启动程序。我们不知道这是否有效,但我们想尝试一下 我们需要创建一个启动器,将其放入“MacOS”文件夹中,以启动主可执行文件。我已经开发

我们有一个应用程序包,它的主要可执行文件是用Perl编写的,并用pp打包的。不幸的是,这个可执行文件阻止我们对.app进行代码设计。显然,使用pp创建的可执行文件不能进行代码签名。为了允许代码签名,我们希望将主可执行文件从其默认文件夹“MacOS”移动到“Resources”文件夹,因为该文件夹似乎可以托管用于代码签名的可执行文件,并创建一个将运行该可执行文件的启动程序。我们不知道这是否有效,但我们想尝试一下

我们需要创建一个启动器,将其放入“MacOS”文件夹中,以启动主可执行文件。我已经开发了一个小的C程序,可以在另一个文件夹中启动一个可执行文件。它在Finder中运行良好,但在.app结构中失败。显然,这与.app中的相对路径不同有关。我希望在下面的C程序中添加一种获取.app当前目录的方法,并构造要打开的可执行文件的相对路径。作为我第一次用C语言写东西,我需要你的帮助来进行改编

#include<stdlib.h>
#include<stdio.h>

int main( void ){

int result ;
result=system("../Resources/MyApp");
printf("%d", result);
return 0;
}
#包括
#包括
内部主(空){
int结果;
结果=系统(“../Resources/MyApp”);
printf(“%d”,结果);
返回0;
}

我不太确定您想做什么,但您需要的是
pwd
。在第一个代码块中,您将收到工作目录的完整路径,在第二个代码块中,您可以通过
int result
知道操作是否成功完成(如果result=0,则为OK)

#包括
#包括
内部主(空)
{
char*dir=malloc(50);
dir=getenv(“pwd”);
printf(“Workdir:%s\n”,dir);
免费(dir);
int结果;
结果=系统(“pwd”);
printf(“%d”,结果);
返回0;
}

然后,您可以编辑完整路径并创建相对路径。

编译时,我遇到以下错误:run.c:9:10:错误:使用未声明的标识符“mi”free(mi);^生成1个错误。好的,将dir改为mi。我只是复制它编译的粘贴代码。非常感谢。最后一个问题,以前从未使用过C。如何修改result=system(“pwd”)中的路径,以便调用比当前路径高一级的可执行文件,该文件名为myApp。我真的很感激。告诉我你是如何从终端运行应用程序的<代码>系统(“命令”)将像在终端中一样运行命令。因此,请尝试
。/./myApp
否,我需要双击.app,将.app中的C代码作为默认可执行文件运行。然后,C代码应该运行正确的程序,该程序位于.app结构中的另一个文件夹中。我的第一个C代码正确地调用了不同目录中的MyApp。我用./launcher(作为我的C代码的启动器)在终端中运行我的C代码,它可以工作。但是,在.app结构中,这不起作用,因为.app更改了当前目录。我需要在我的C代码中将当前目录强制为正确的目录,以正确调用可执行文件MyApp。我希望这能澄清问题。
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
    char* dir= malloc (50);
    dir = getenv("pwd");
    printf("Workdir: %s\n", dir);
    free(dir);

    int result;
    result = system("pwd");
    printf("%d", result);
    return 0;
}