我的猜測是,無論您正在運行的程序是從沒有寫入權限的目錄中執行的。事實上,沒有「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
(您可以在你的主目錄的執行位,以便允許-less程序可以訪問它的子目錄,即使它不能讀取任何東西。)
程序是違反訪問權限的錯誤。有關此錯誤的信息已轉儲到garden.exe.stackdump。 –
在命令行運行它時,有可能(甚至有可能)在任務計劃程序下有不同的環境。你可能有一些代碼不檢查某個系統調用的返回值,但繼續使用實際上是無效的引用 - 也許是一個空指針 - 這是你所假設的函數的結果'總是成功'。 –
沒有garden.exe.stackdump – jeremy