glusterfs
1#define _GNU_SOURCE2
3#include <stdio.h>4#include <errno.h>5#include <string.h>6#include <sys/types.h>7#include <sys/stat.h>8#include <fcntl.h>9#include <stdlib.h>10#include <unistd.h>11
12int
13main(int argc, char *argv[])14{
15char *filename = NULL, *volname = NULL, *cmd = NULL;16char buffer[1024] = {170,18};19int fd = -1;20int ret = -1;21struct stat statbuf = {220,23};24
25if (argc != 3) {26fprintf(stderr, "usage: %s <file-name> <volname>\n", argv[0]);27goto out;28}29
30filename = argv[1];31volname = argv[2];32
33fd = open(filename, O_RDWR | O_CREAT, 0);34if (fd < 0) {35fprintf(stderr, "open (%s) failed (%s)\n", filename, strerror(errno));36goto out;37}38
39ret = write(fd, "test-content", 12);40if (ret < 0) {41fprintf(stderr, "write failed (%s)", strerror(errno));42goto out;43}44
45ret = fsync(fd);46if (ret < 0) {47fprintf(stderr, "fsync failed (%s)", strerror(errno));48goto out;49}50
51ret = fstat(fd, &statbuf);52if (ret < 0) {53fprintf(stderr, "fstat failed (%s)", strerror(errno));54goto out;55}56
57ret = asprintf(&cmd, "gluster --mode=script volume stop %s force", volname);58if (ret < 0) {59fprintf(stderr, "cannot construct cli command string (%s)",60strerror(errno));61goto out;62}63
64ret = system(cmd);65if (ret < 0) {66fprintf(stderr, "stopping volume (%s) failed", volname);67goto out;68}69
70sleep(3);71
72ret = read(fd, buffer, 1024);73if (ret >= 0) {74fprintf(stderr,75"read should've returned error, "76"but is successful\n");77ret = -1;78goto out;79}80
81ret = 0;82out:83return ret;84}
85