【发布时间】:2017-09-01 12:51:01
【问题描述】:
如何告诉 C 中嵌入的 perl 它的工作目录是什么?
它似乎设置为使用嵌入式 perl 的可执行文件的目录。在调用嵌入的 perl 内容之前从外部设置目录不会改变它的行为。
一个可能的解决方法是在实际脚本启动之前弹出“chdir”,但我不喜欢这样。
我的代码在技术上看起来像这样:
PERL_SYS_INIT3(NULL, NULL, NULL);
my_perl = perl_alloc();
PERL_SET_CONTEXT(my_perl);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
PERL_SET_CONTEXT(my_perl);
PL_perl_destruct_level = 1;
perl_construct(my_perl);
int argc = 2;
char** argv = new char*[argc];
argv[0] = new char[4096];
argv[0][0] = '\0';
argv[1] = scriptFileName;
PERL_SET_CONTEXT(my_perl);
perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
perl_run(my_perl)
PL_perl_destruct_level = 1;
PERL_SET_CONTEXT(my_perl);
perl_destruct(my_perl);
perl_free(my_perl);
my_perl = NULL;
上述代码在单独的线程中运行。也许有什么需要考虑的?
感谢任何提示!
【问题讨论】:
-
不,似乎不是这样。我试过这个,但奇怪的是这对脚本的工作目录没有影响。顺便说一句,我正在使用 Qt5 功能来更改目录。但我无法想象 Qt5 有什么副作用。
-
查看我的回复,我只是使用
chdir更改工作目录,它会影响之后运行的 Perl 代码。我不知道你到底尝试了什么,但它对我来说符合预期。 -
CWD 是进程的属性。 Perl 没有要设置的 CWD。span>