如何监控FIFO?

时间:2017-09-29 23:51:02

标签: linux ipc fifo

我想通过设置该流量的只读终端窗口来理想地调试两个进程之间的问题。这是我可以简单地使用现有的标准Linux实用程序吗?

FIFO位于/run/myfifo,并在其中一个进程中创建:

/* Create a FIFO if one doesn't already exist */
int createFifo(char *filepath) {
  if (access(path, F_OK) == -1) {
    return mkfifo(filepath, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
  }

  return 0;
}

tail -F /run/myfifo

1 个答案:

答案 0 :(得分:1)

如何监控它有多种选择。我希望你有两个过程。一个过程是写入fifo,另一个是读取。

如果您需要单独调试阅读器和编写器,则可以使用像cat这样的简单程序。

writer-process

# and in another terminal
cat /run/myfifo

reader-process &

# and in another terminal
cat > /run/myfifo

当您需要调试编写器和阅读器时,可以使用Daniel Schepler建议的strace。 strace可以与您的程序一起运行,在这种情况下,日志输出会被重定向到另一个终端/dev/pts/4

strace -e read -s 999 reader-process 2> /dev/pts/4

该命令记录来自所有文件描述符的所有读取调用。如果要仅过滤从管道读取,则必须标识fifo文件描述符并grep输出。

如果strace不是一个选项,你可能会强迫读者和作者使用不同的fifo名称,然后在记录传输数据的程序中连接这两个fifos。这种连接器的最简单变体可以是像

这样的脚本
 cat < /run/mywritefifo | tee /dev/tty > /run/myreadfifo