#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <fcntl.h>
#include <share.h>
char *make_tempfile(void *data, int len) {
char *filnam;
int fd;
char tmpdirnam[_MAX_PATH];
char tmpfilnam[_MAX_PATH];
int namlen;
memset(tmpdirnam, 0, _MAX_PATH);
if (GetTempPathA(_MAX_PATH, tmpdirnam) == 0) {
return NULL;
}
memset(tmpfilnam, 0, _MAX_PATH);
if (GetTempFileNameA(tmpdirnam, "kks", 0, tmpfilnam) == 0) {
return NULL;
}
namlen = strlen(tmpfilnam) + 1;
if ((filnam = calloc(namlen, sizeof(char))) == NULL) {
return NULL;
}
if (strcpy_s(filnam, namlen, tmpfilnam) != 0) {
free(filnam);
return NULL;
}
if (data) {
if ((_sopen_s(&fd, filnam, _O_WRONLY | _O_BINARY, _SH_DENYRD, _S_IWRITE)) != 0) {
free(filnam);
return NULL;
}
if (_write(fd, data, len) == -1) {
free(filnam);
return NULL;
}
if (_close(fd) == -1) {
free(filnam);
return NULL;
}
}
return filnam;
}
void check_exist(char *filename) {
struct stat st;
if (stat(filename, &st) == 0) {
puts("ファイルはあるよ");
} else {
puts("ファイルはないよ");
}
}
int main() {
char *tempfile;
HANDLE h;
tempfile = make_tempfile(NULL, 0);
printf("filename: %s\n", tempfile);
h = CreateFileA(tempfile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, NULL);
if (h == INVALID_HANDLE_VALUE) {
fprintf(stderr, "CreateFile(): %ld\n", GetLastError());
exit(1);
}
check_exist(tempfile);
CloseHandle(h);
check_exist(tempfile);
return 0;
}
filename: C:\DOCUME~1\sugawara\LOCALS~1\Temp\kks1EC.tmp
ファイルはあるよ
ファイルはないよ
続行するには何かキーを押してください . . .