glusterfs

Форк
0
/
gfapi-o-path_v1.c 
98 строк · 2.7 Кб
1
#include <sys/types.h>
2
#include <sys/stat.h>
3
#include <fcntl.h>
4
//#include <asm-generic/fcntl.h> O_PATH here
5
#include <stdio.h>
6
#include <string.h>
7
#include <errno.h>
8
#include <glusterfs/api/glfs.h>
9
#include <glusterfs/api/glfs-handles.h>
10

11
#ifndef O_PATH
12
#define O_PATH 010000000
13
#endif
14

15
#define VALIDATE_AND_GOTO_LABEL_ON_ERROR(func, ret, label)                     \
16
    do {                                                                       \
17
        if (ret < 0) {                                                         \
18
            fprintf(stderr, "%s : returned error %d (%s)\n", func, ret,        \
19
                    strerror(errno));                                          \
20
            goto label;                                                        \
21
        }                                                                      \
22
    } while (0)
23

24
int
25
main(int argc, char *argv[])
26
{
27
    int ret = -1;
28
    int flags = O_RDWR | O_SYNC;
29
    glfs_t *fs = NULL;
30
    glfs_fd_t *fd1 = NULL;
31
    glfs_fd_t *fd2 = NULL;
32
    char *volname = NULL;
33
    char *logfile = NULL;
34
    char *hostname = NULL;
35
    const char *dirname = "dir_tmp";
36
    const char *filename = "file_tmp";
37
    const char *buff =
38
        "An opinion should be the result of thought, "
39
        "not a substitute for it.";
40

41
    if (argc != 4) {
42
        fprintf(stderr, "Invalid argument\n");
43
        return 1;
44
    }
45

46
    hostname = argv[1];
47
    volname = argv[2];
48
    logfile = argv[3];
49

50
    fs = glfs_new(volname);
51
    if (!fs)
52
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_new", ret, out);
53

54
    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);
55
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_volfile_server", ret, out);
56

57
    ret = glfs_set_logging(fs, logfile, 8);
58
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_set_logging", ret, out);
59

60
    ret = glfs_init(fs);
61
    VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_init", ret, out);
62

63
    fd1 = glfs_creat(fs, filename, O_CREAT, 0644);
64
    if (fd1 == NULL) {
65
        ret = -1;
66
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_creat", ret, out);
67
    }
68
    glfs_close(fd1);
69
    
70
    fd1 = glfs_open(fs, filename, O_PATH);
71
    if (fd1 == NULL) {
72
        ret = -1;
73
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_open(O_PATH)", ret, out);
74
    }
75

76
    ret = glfs_unlink(fs, filename);
77
    if (ret == -1) {
78
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_unlink()", ret, out);
79
    }
80

81
    struct stat stat;
82
    ret = glfs_fstat(fd1, &stat);
83
    if (ret == -1) {
84
        VALIDATE_AND_GOTO_LABEL_ON_ERROR("glfs_fstat()", ret, out);
85
    }
86

87
    ret = 0;
88
out:
89
    if (fd1 != NULL)
90
        glfs_close(fd1);
91
    if (fs) {
92
        ret = glfs_fini(fs);
93
        if (ret)
94
            fprintf(stderr, "glfs_fini(fs) returned %d\n", ret);
95
    }
96

97
    return ret;
98
}
99

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

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

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

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