текущий рабочий каталог при выполнении dll - PullRequest
0 голосов
/ 22 января 2019

Я запускаю некоторый исходный код на фортране из программы на C, используя dll . Я хочу использовать CALL GETCWD (DIRNAME) в Фортране для доступа к файлам. Является ли текущий рабочий каталог (CWD) каталогом, в котором находится моя dll-библиотека или где находится мой C-код?

1 Ответ

0 голосов
/ 22 января 2019

CWD означает C urrent W orking D irectory , и это (обычно) каталоготкуда текущий процесс был запущен.Проверьте [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
...