kv_linux.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Copyright (C) 2019-2020 Alibaba Group Holding Limited
  3. */
  4. #ifndef AOS_KVSET_H
  5. #define AOS_KVSET_H
  6. #include <stdint.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #define KV_MAX_KEYPATH_LEN 1024
  11. #define KV_MAX_KEY_LEN 256
  12. #define KV_MAX_VALUE_LEN 4096
  13. typedef struct kvset kv_t;
  14. struct kvset {
  15. int handle;
  16. char path[KV_MAX_KEYPATH_LEN - KV_MAX_KEY_LEN];
  17. };
  18. /**
  19. * @brief init the kv fs
  20. * @param [in] kv : object must be alloced
  21. * @param [in] path : kv set base path
  22. * @return 0/-1
  23. */
  24. int kv_init(kv_t *kv, const char *path);
  25. /**
  26. * @brief reset the kv fs
  27. * @param [in] kv
  28. * @return 0/-1
  29. */
  30. int kv_reset(kv_t *kv);
  31. /**
  32. * @brief set key-value pair
  33. * @param [in] kv
  34. * @param [in] key
  35. * @param [in] value
  36. * @param [in] size : size of the value
  37. * @return size on success
  38. */
  39. int kv_set(kv_t *kv, const char *key, void *value, int size);
  40. /**
  41. * @brief get value by the key-string
  42. * @param [in] kv
  43. * @param [in] key
  44. * @param [in] value
  45. * @param [in] size : size of the value
  46. * @return > 0 on success
  47. */
  48. int kv_get(kv_t *kv, const char *key, void *value, int size);
  49. /**
  50. * @brief delete the key from kv fs
  51. * @param [in] kv
  52. * @param [in] key
  53. * @return 0 on success
  54. */
  55. int kv_rm(kv_t *kv, const char *key);
  56. /**
  57. * @brief iterate all valid kv pair
  58. * @param [in] kv
  59. * @param [in] func : callback
  60. * @param [in] arg : opaque of the fn callback
  61. * @return 0 on success
  62. */
  63. void kv_iter(kv_t *kv, void (*func)(char *key, char *val, uint16_t val_size, void *arg), void *arg);
  64. /********************************
  65. * MUTEX
  66. ********************************/
  67. #include <pthread.h>
  68. typedef struct __aos_kv_mutex_t {
  69. void * hdl;
  70. const char *key_file;
  71. } aos_kv_mutex_t;
  72. /**
  73. * Alloc a mutex.
  74. *
  75. * @param[in] mutex pointer of mutex object, mutex object must be alloced,
  76. * hdl pointer in aos_kv_mutex_t will refer a kernel obj internally.
  77. *
  78. * @return 0: success.
  79. */
  80. int aos_kv_mutex_new(aos_kv_mutex_t *mutex);
  81. /**
  82. * Free a mutex.
  83. *
  84. * @param[in] mutex mutex object, mem refered by hdl pointer in aos_kv_mutex_t will
  85. * be freed internally.
  86. */
  87. void aos_kv_mutex_free(aos_kv_mutex_t *mutex);
  88. /**
  89. * Lock a mutex.
  90. *
  91. * @param[in] mutex mutex object, it contains kernel obj pointer which aos_kv_mutex_new alloced.
  92. * @param[in] timeout waiting until timeout in milliseconds.
  93. *
  94. * @return 0: success.
  95. */
  96. int aos_kv_mutex_lock(aos_kv_mutex_t *mutex, unsigned int timeout);
  97. /**
  98. * Unlock a mutex.
  99. *
  100. * @param[in] mutex mutex object, it contains kernel obj pointer which oc_mutex_new alloced.
  101. *
  102. * @return 0: success.
  103. */
  104. int aos_kv_mutex_unlock(aos_kv_mutex_t *mutex);
  105. #ifdef __cplusplus
  106. }
  107. #endif
  108. #endif