cf6b2e83创建于 4月29日历史提交
#include "kvdb.h"
#include "kvtest.h"
#include <nuttx/config.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>

int main(int argc, char *argv[])
{
  if (argc < 3)
    {
      syslog(LOG_ERR, "please input testkey1 and testkey2");
    }
  int nums = atoi(argv[1]);
  char *testkey[nums];
  bool monitored[nums];
  int flag = 0;
  for (int i = 0; i < nums; ++i)
    {
      int g = i + 2;
      testkey[i] = argv[g];
    }
  struct pollfd fds[nums];
  char newkey[PROPERTY_KEY_MAX];
  char newvalue[PROPERTY_VALUE_MAX];

  for (int i = 0; i < nums; ++i)
    {
      int fd1 = property_monitor_open(testkey[i]);
      fds[i].fd = fd1;
      fds[i].events = POLLIN;
      monitored[i] = false;
    }

  while (1)
    {
      flag = 0;
      int ret = poll(fds, nums, -1);
      if (ret <= 0)
        goto out;

      for (int i = 0; i < nums; i++)
        {
          if ((fds[i].revents & POLLIN) == 0)
            continue;

          monitored[i] = true;
          memset(newkey, 0, PROPERTY_KEY_MAX);
          memset(newvalue, 0, PROPERTY_VALUE_MAX);

          ret = property_monitor_read(fds[i].fd, newkey, newvalue, PROPERTY_VALUE_MAX);
          if (ret < 0)
            goto out;

          syslog(LOG_INFO, "the new key: %s\n", newkey);
          syslog(LOG_INFO, "the new value: %s\n", newvalue);
        }

      for (int i = 0; i < nums; ++i)
        {
          if (!monitored[i])
            flag = 1;
        }
      if (flag == 0)
        break;
    }

out:
  for (int i = 0; i < nums; ++i)
    property_monitor_close(fds[i].fd);

  return 0;
}