【问题标题】:current working directory when executing a dll执行 dll 时的当前工作目录
【发布时间】:2019-01-22 10:47:26
【问题描述】:

我使用 dll 从 C 程序运行一些 fortran 源代码。我想在 Fortran 中使用 CALL GETCWD(DIRNAME) 来访问文件。当前工作目录 (CWD) 是我的 fortran dll 所在的目录还是我的 C 代码所在的目录?

【问题讨论】:

  • C当前WorkingD目录。 man7.org/linux/man-pages/man2/getcwd.2.html。这是您启动程序的目录。
  • 请注意,getcwd 不是 fortran 标准的一部分,而是各种编译器(如 gfortran、ifort 等)的通用扩展......相关:stackoverflow.com/questions/30279228/…
  • @kvantour 我不知道,谢谢!我正在使用 gfortran。
  • @CristiFati 您链接的来源说“调用进程的当前工作目录”。我假设调用进程是 DLL 而不是我的 C 代码,对吧?
  • 不,它是构建您的 C 代码(并且可能会加载 .dll)产生的可执行文件。

标签: c dll fortran


【解决方案1】:

CWD 代表 C当前Working D目录,它是(通常)启动当前进程的目录。查看[man7]: GETCWD(3) 了解更多详情。为了更好地理解发生了什么,我准备了一个小例子。

code.c

#include <stdio.h>
#include <unistd.h>
#include <errno.h>

#define PATH_SIZE 0x0200


int main() {
    char buf[PATH_SIZE];
    if (getcwd(buf, PATH_SIZE) == NULL) {
        printf("Error %d getting CWD\n", errno);
        return 1;
    }
    printf("CWD: [%s]\n", buf);
    return 0;
}

输出

[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q054306561]> ls
code.c
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q054306561]> gcc -o cwd code.c
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q054306561]> ls
code.c  cwd
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q054306561]> ./cwd
CWD: [/home/cfati/Work/Dev/StackOverflow/q054306561]
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q054306561]> pushd .. && ./q054306561/cwd && popd
~/Work/Dev/StackOverflow ~/Work/Dev/StackOverflow/q054306561
CWD: [/home/cfati/Work/Dev/StackOverflow]
~/Work/Dev/StackOverflow/q054306561
[cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q054306561]> mkdir test && pushd test && ../cwd && popd
~/Work/Dev/StackOverflow/q054306561/test ~/Work/Dev/StackOverflow/q054306561
CWD: [/home/cfati/Work/Dev/StackOverflow/q054306561/test]
~/Work/Dev/StackOverflow/q054306561

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2013-11-27
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多