mirror of
https://github.com/gluster/glusterfs.git
synced 2026-02-06 09:48:44 +01:00
Change-Id: Ia84cc24c8924e6d22d02ac15f611c10e26db99b4 Signed-off-by: Nigel Babu <nigelb@redhat.com>
90 lines
1.5 KiB
C
90 lines
1.5 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
ssize_t
|
|
nwrite(int fd, const void *buf, size_t count)
|
|
{
|
|
ssize_t ret = 0;
|
|
ssize_t written = 0;
|
|
|
|
for (written = 0; written != count; written += ret) {
|
|
ret = write(fd, buf + written, count - written);
|
|
if (ret < 0) {
|
|
if (errno == EINTR)
|
|
ret = 0;
|
|
else
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
ret = written;
|
|
out:
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
file_write(char *filename, int bs, int count)
|
|
{
|
|
int fd = 0;
|
|
int ret = -1;
|
|
int i = 0;
|
|
char *buf = NULL;
|
|
|
|
bs = bs * 1024;
|
|
|
|
buf = (char *)malloc(bs);
|
|
if (buf == NULL)
|
|
goto out;
|
|
|
|
memset(buf, 0, bs);
|
|
|
|
fd = open(filename, O_RDWR | O_CREAT | O_SYNC, 0600);
|
|
while (i < count) {
|
|
ret = nwrite(fd, buf, bs);
|
|
if (ret == -1) {
|
|
close(fd);
|
|
goto out;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
ret = fdatasync(fd);
|
|
if (ret) {
|
|
close(fd);
|
|
goto out;
|
|
}
|
|
|
|
ret = close(fd);
|
|
if (ret)
|
|
goto out;
|
|
|
|
ret = 0;
|
|
|
|
out:
|
|
if (buf)
|
|
free(buf);
|
|
return ret;
|
|
}
|
|
|
|
int
|
|
main(int argc, char **argv)
|
|
{
|
|
if (argc != 4) {
|
|
printf("Usage: %s <filename> <block size in k> <count>\n", argv[0]);
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
if (file_write(argv[1], atoi(argv[2]), atoi(argv[3])) < 0) {
|
|
perror("write failed");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|