glusterfs

Форк
0
/
gfapi-dup.c 
84 строки · 2.4 Кб
1
#include <stdio.h>
2
#include <string.h>
3
#include <errno.h>
4
#include <glusterfs/api/glfs.h>
5
#include <glusterfs/api/glfs-handles.h>
6

7
#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \
8
    do {                                                                       \
9
        if (ret < 0) {                                                         \
10
            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \
11
                    strerror(errno));                                          \
12
            goto label;                                                        \
13
        }                                                                      \
14
    } while (0)
15

16
int
17
main(int argc, char *argv[])
18
{
19
    int ret = -1;
20
    int flags = O_RDWR | O_SYNC;
21
    glfs_t *fs = NULL;
22
    glfs_fd_t *fd1 = NULL;
23
    glfs_fd_t *fd2 = NULL;
24
    char *volname = NULL;
25
    char *logfile = NULL;
26
    char *hostname = NULL;
27
    const char *filename = "file_tmp";
28
    const char *buff =
29
        "An opinion should be the result of thought, "
30
        "not a substitute for it.";
31

32
    if (argc != 4) {
33
        fprintf(stderr, "Invalid argument\n");
34
        return 1;
35
    }
36

37
    hostname = argv[1];
38
    volname = argv[2];
39
    logfile = argv[3];
40

41
    fs = glfs_new(volname);
42
    if (!fs)
43
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_new", ret, out);
44

45
    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);
46
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);
47

48
    ret = glfs_set_logging(fs, logfile, 7);
49
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);
50

51
    ret = glfs_init(fs);
52
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);
53

54
    fd1 = glfs_creat(fs, filename, flags, 0644);
55
    if (fd1 == NULL) {
56
        ret = -1;
57
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_creat", ret, out);
58
    }
59

60
    ret = glfs_write(fd1, buff, strlen(buff), flags);
61
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_write", ret, out);
62

63
    fd2 = glfs_dup(fd1);
64
    if (fd2 == NULL) {
65
        ret = -1;
66
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_dup", ret, out);
67
    }
68

69
    ret = glfs_lseek(fd2, 0, SEEK_SET);
70
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_lseek", ret, out);
71

72
out:
73
    if (fd1 != NULL)
74
        glfs_close(fd1);
75
    if (fd2 != NULL)
76
        glfs_close(fd2);
77
    if (fs) {
78
        ret = glfs_fini(fs);
79
        if (ret)
80
            fprintf(stderr, "glfs_fini(fs) returned %d\n", ret);
81
    }
82

83
    return ret;
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.