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