了解从命名管道读取

时间:2015-09-14 16:45:47

标签: c fifo

首先,为什么main循环仅在发送数据时调用getfifo?进入while (true),我本以为它会继续循环。

其次,在发送数据时,首先点击的是read(c2s, &buf, MAX_BUF),然后是主loop->getfifo(),然后是fifo func。这似乎不合时宜。有人可以解释一下吗?

最后,这是布局代码的正确方法吗?我将有一个主要的连续循环,它将在完成时运行许多不同的部分,但是顺序一切似乎运行使我觉得我做错了。

int main(int argc, char *argv[])
{
  if (stat(myfifo, &st) != 0)
    mkfifo(myfifo, 0666);

  while (true)
    getfifo();

  unlink(myfifo);
}


void getfifo()
{
  char buf[MAX_BUF] = "";
  /* open the FIFO (named pipe) */
  int c2s = open(myfifo, O_RDONLY);

  // if there is data on the pipe we read it in buf
  if (read(c2s, &buf, MAX_BUF) > 0) {
    printf("FIFO Received: %s\n", buf);
    // do something with the received data
    // TODO: parse it and send it over to slaves
  }
  sleep(1);

  close(c2s);
}

对不起,如果这是基本的,这是我十多年来的第一个C ++程序,想要真正理解我在做什么,而不仅仅是让它工作。

0 个答案:

没有答案