私の推測では、あなたのプログラムを実行しているものは、あなたが書き込み許可を持っていないディレクトリから実行していると思います。 「garden.exe.stackdump」ファイルがないという事実は、それを手がかりとして与えます。
ファイルに保存するときは、fopen("myfile","w")
として保存するのか、完全修飾名を使用していますか?また、あなたのプログラムので
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);
:たとえば、あなたが何かを持っていると思います、あなたが保存したいファイルが「foobar.png」と呼ばれていることを言わせて、あなたは下の名前のディレクトリに保存したいですまた、ファイルにエラーをダンプするようだが、プログラムの開始時にchdir("/home/myname")
にうまくやって、 ".stackdump"ファイルがアクセスできる場所に置かれるようにすることができます。
他にも、タスクスケジューラがスクリプトをnobody
またはその他の権限を必要としないアカウントとして実行している可能性があります。その場合は、fopen
とchdir
の完全パスをグローバル書き込み可能領域(/tmp
など)または公開アクセス権を持つ作業ディレクトリに使用することをお勧めします。たとえば、次のように
mkdir /home/myname/scratch
chmod a+rwx /home/myname/scratch
chmod a+x /home/myname
(権限のないプログラムは、それはそれで何かを読み取ることができないにもかかわらず、そのサブディレクトリへのアクセスを得ることができるようにあなたのホームディレクトリに実行ビットを設定してください。)
プログラムアクセス違反が発生しています。このエラーに関する情報はgarden.exe.stackdumpにダンプされています。 –
タスクスケジューラの環境は、コマンドラインで実行したときとは異なる可能性があります(場合によっては可能性もあります)。あなたはおそらく、あるシステムコールからの戻り値をチェックしないが、実際には無効な参照(おそらくヌルポインタ)を使うようなコードをいくつか持っているでしょう。 –
garden.exe.stackdumpはありません – jeremy