Я предполагаю, что все, что запускает ваша программа, делает это из каталога, в который у вас нет прав на запись. Тот факт, что нет файла "garden.exe.stackdump", дает это в качестве подсказки.
Когда вы сохраняете его в файл, вы сохраняете его как fopen("myfile","w")
или используете полное имя? Например, предположим, что файл, который вы хотите сохранить, называется «foobar.png», и вы хотите сохранить его в каталог, который вы назвали ниже, у вас будет что-то вроде:
char fname[256] = "foobar.png";
char directory[256] = "C:/Users/Joel/Desktop/garden/snaps";
char path[256];
memset(path, 0, sizeof(path));
strcpy(path, directory);
strcat(path, "/");
strcat(path, fname);
if ((fp = fopen(path, "w")) == NULL) {
fprintf(stderr, "Failed to open %s: %s\n", path, strerror(errno));
exit(1);
}
fwrite(yourdata, yourdata_size, 1, fp);
Поскольку ваша программа, похоже, также выводит ошибки в файл, вы можете преуспеть в chdir("/home/myname")
в начале вашей программы, чтобы любые файлы ".stackdump" помещались туда, где у вас есть доступ.
Другая вещь, которую вы, возможно, захотите принять во внимание, - это то, что ваш планировщик задач может запускать ваш скрипт как nobody
или какую-либо другую учетную запись, лишенную разрешений. Если это так, вы можете использовать полный путь в fopen
и chdir
к области с возможностью глобальной записи (например, /tmp
) или рабочему каталогу с открытыми разрешениями. Например:
mkdir /home/myname/scratch
chmod a+rwx /home/myname/scratch
chmod a+x /home/myname
(Вы устанавливаете бит выполнения в своем домашнем каталоге так, чтобы программа без прав доступа могла получить доступ к своему подкаталогу, даже если она ничего не может прочитать в нем.)