测试代码:
#ifdef _MSC_VER
#include <sys/stat.h>
#include <io.h>
#include <Windows.h>
#else
#include <sys/time.h>
#include <unistd.h>
#endif
#include <fcntl.h>
#include <ctime>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#ifdef _MSC_VER
#define OPEN(file, mode) _open(file, mode, S_IWRITE | S_IREAD)
#define WRITE(fd, data, len) _write(fd, data, len)
#define FLUSH(fd) _commit(fd)
#define CLOSE(fd) _close(fd)
#define SLEEP(s) Sleep(1000 * s)
#else
#define OPEN(file, mode) open(file, mode, S_IRUSR | S_IWUSR | S_IRGRP)
#define WRITE(fd, data, len) write(fd, data, len);
#define FLUSH(fd) fsync(fd)
#define CLOSE(fd) close(fd)
#define SLEEP(s) sleep(s)
#endif
static int s_fd = -1;
static FILE * s_file = nullptr;
static std::ofstream s_ofs;
static HANDLE s_handle = INVALID_HANDLE_VALUE;
enum test_type_t
{
TYPE_MIN,
TYPE_INT = TYPE_MIN,
TYPE_FILE,
TYPE_FSTREAM,
TYPE_HANDLE,
TYPE_MAX
};
const char * get_type(enum test_type_t test_type)
{
switch (test_type)
{
case TYPE_INT:
{
return("int");
}
case TYPE_FILE:
{
return("FILE");
}
case TYPE_FSTREAM:
{
return("fstream");
}
case TYPE_HANDLE:
{
return("handle");
}
default:
{
return("unknown");
}
}
};
void open_file(enum test_type_t test_type)
{
switch (test_type)
{
case TYPE_INT:
{
s_fd = OPEN("a.txt", O_CREAT | O_RDWR | O_APPEND);
if (s_fd < 0)
{
fprintf(stderr, "open failed\n");
exit(1);
}
break;
}
case TYPE_FILE:
{