내 생각에 귀하의 프로그램을 실행하는 모든 것은 쓰기 권한이없는 디렉토리에서 그렇게합니다. 사실 "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