#include #include #include #if __LP64__ #define PRI_DWORD "u" #else #define PRI_DWORD "lu" #endif static const char* geterr(DWORD err) { static char msg[1024]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)msg, sizeof(msg), NULL); return msg; } int main(int argc, char* argv[]) { int i; int status = 0; for (i = 1; i < argc; i++) { HANDLE file; DWORD err, bytesWritten; BY_HANDLE_FILE_INFORMATION fileInfo; file = CreateFileA(argv[i], GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file == INVALID_HANDLE_VALUE) { err = GetLastError(); fprintf(stderr, "%s: CreateFile: %s (err %" PRI_DWORD")\n", argv[i], geterr(err), err); status++; continue; } if (!WriteFile(file, "Hello world!\n", 12, &bytesWritten, NULL) || bytesWritten != 12) { err = GetLastError(); fprintf(stderr, "%s: WriteFile: %s (err %" PRI_DWORD ")\n", argv[i], geterr(err), err); CloseHandle(file); status++; continue; } if (!GetFileInformationByHandle(file, &fileInfo)) { err = GetLastError(); fprintf(stderr, "%s: GetFileInformationByHandle: %s (err %" PRI_DWORD ")\n", argv[i], geterr(err), err); CloseHandle(file); status++; continue; } printf("%s: FileInformationByHandle: nFileSize=%" PRIu64 "\n", argv[i], (uint64_t)fileInfo.nFileSizeHigh << 32 | fileInfo.nFileSizeLow); if (!CloseHandle(file)) { err = GetLastError(); fprintf(stderr, "%s: CloseHandle: %s (err %" PRI_DWORD ")\n", argv[i], geterr(err), err); status++; continue; } } return status; }