mirror of https://github.com/t1meshift/os_labs.git
66 lines
1.4 KiB
C
66 lines
1.4 KiB
C
|
#include <assert.h>
|
|||
|
#include <fcntl.h>
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
#include <sys/wait.h>
|
|||
|
#include <sys/time.h>
|
|||
|
#include <unistd.h>
|
|||
|
|
|||
|
#define BENCHMARK(name, payload) \
|
|||
|
do {\
|
|||
|
struct timeval t0, t1;\
|
|||
|
gettimeofday(&t0, NULL);\
|
|||
|
payload \
|
|||
|
gettimeofday(&t1, NULL);\
|
|||
|
struct timeval result;\
|
|||
|
timersub(&t1, &t0, &result);\
|
|||
|
printf(name ": %ld.%06lds\n", result.tv_sec, result.tv_usec);\
|
|||
|
} while (0)
|
|||
|
|
|||
|
/*
|
|||
|
1. Используя creat(), write(), fflush(), close(), gettimeofday(), разработать программу, которая
|
|||
|
открывает файл,
|
|||
|
записывает туда 300 KB,
|
|||
|
очищает все записи,
|
|||
|
закрывает и
|
|||
|
удаляет файл,
|
|||
|
а также измеряет и выводит время, затраченное на каждое действие.
|
|||
|
*/
|
|||
|
|
|||
|
int main() {
|
|||
|
int f = -1;
|
|||
|
|
|||
|
BENCHMARK("creat() call",{
|
|||
|
f = creat("task1.txt", S_IWUSR);
|
|||
|
});
|
|||
|
|
|||
|
if (f == -1) {
|
|||
|
perror("creat()");
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
int bytes_written = -1;
|
|||
|
const size_t data_size = 307200; // bytes, 300KiB
|
|||
|
char *random_data = malloc(data_size);
|
|||
|
|
|||
|
BENCHMARK("write 300KiB", {
|
|||
|
bytes_written = write(f, random_data, data_size);
|
|||
|
});
|
|||
|
free(random_data);
|
|||
|
|
|||
|
if (bytes_written == -1) {
|
|||
|
perror("write()");
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
BENCHMARK("fsync() call", {
|
|||
|
fsync(f);
|
|||
|
});
|
|||
|
|
|||
|
BENCHMARK("close() call", {
|
|||
|
close(f);
|
|||
|
});
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|