Получить место, где создается файл - PullRequest
1 голос
/ 18 октября 2019

У меня есть устаревший код, который создает и записывает в файл. Проблема в том, что я понятия не имею, куда сохраняется этот файл. Я пытаюсь написать что-то, что даст мне путь к месту сохранения файла, но у меня ничего не получается.

Я думал, что readlink показался мне лучшим способом, но я могу »даже получить ссылку для чтения, чтобы вернуть местоположение моей тестовой программы:

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

char* savefm(char* savename)
{

FILE *tfp;
char buf[1024];
ssize_t len;

tfp = fopen(savename,"w");
fprintf(tfp,"Write to file\n");

len = readlink("proc/self/fd", buf, 1023);
buf[len]='\0';

if(len == -1)
    perror("readlink");
else
    printf("The path to this file is: %s\n", buf);

    if (tfp == NULL)
         return("INVALID");
    else
         return("VALID");
}

void main(int argc, char *argv[])
{

char *filename;
char buf[1024];

ssize_t len = readlink("proc/self/exe", buf, 1023);
buf[len]='\0';

if(len == -1)
    perror("readlink");
else
    printf("The path to this process is: %s\n", buf);

filename = savefm("file1");

if (filename == "VALID")
     printf("VALID\n");
else
     printf("INVALID\n");
}

И вывод:

readlink: No such file or directory
readlink: No such file or directory
VALID

Это сбивает с толку меня, так как 1) Программа печатает VALIDЭто означает, что дескриптор файла был успешно создан. 2) В моей тестовой директории, в которой я запускаю этот файл, файл «file1» создан и записан, поэтому я ЗНАЮ, что файл существует, потому что он тут же.

Любая помощь приветствуется, либо с исправлением readlink, либо с помощью других методов получения пути к файлу. Я использую Solaris 11.3.

...