- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
gcc (GCC) 4.7.2
c89
我正在使用管道 mkfifo。我有一个读者和一个作家。
我希望读者阻塞,直到文件中有内容。
有一个标志可以设置为非阻塞模式的 O_NONBLOCK。所以默认情况下它应该在读取时阻塞。
写入文件
int main(void)
{
int fd;
const char *pipe_file = "../../pipe_file/file";
const char *pipe_msg = "PIPE Message";
LOG_INFO("Start writer");
/* Create the FIFO named pipe with read/write permissions */
mkfifo(pipe_file, 0666);
/* Write to the pipe */
fd = open(pipe_file, O_WRONLY);
write(fd, pipe_msg, strlen(pipe_msg) + 1);
LOG_INFO("Terminate writer");
return 0;
}
从文件中读取
int main(void)
{
int fd = -1;
const char *pipe_file = "../../pipe_file/file";
#define BUF_SIZE 1024
char rd_buffer[BUF_SIZE];
LOG_INFO("Start reader");
fd = open(pipe_file, O_RDONLY);
do {
memset(rd_buffer, 0, sizeof(rd_buffer));
/* I WANT IT TO BLOCK HERE, UNTIL THE FILE IS WRITTEN AGAIN */
read(fd, rd_buffer, sizeof(rd_buffer));
LOG_INFO("Contents of buffer [ %s ]", rd_buffer);
/* NO NEED TO SLEEP AS THE FILE WILL DELAY WHEN BLOCKING, I THINK */
} while(1);
/* We're done clean up */
close(fd);
unlink(pipe_file);
LOG_INFO("Terminate reader");
return 0;
}
最佳答案
如果 fifo 的另一端在写入模式下未打开,您的 read()
将立即返回。尝试先运行您的 Write 程序并查看。
更多信息请点击here
关于c - 使用 mkfifo 阻塞读取直到写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17698338/
我遇到了以下代码的问题: #include #include #include #include #include int main(int argc, char*argv[]){ FILE
我有一个不断需要写入信息的进程。此外,还有第二个进程有时会连接到写入进程的“信息 channel ”,并且应该读取连接后写入的信息。此过程也可能会再次断开连接并重新连接几次。 我目前通过在我的 C++
我的 C 程序中的以下行应提供 All/Group/Owner 读写权限 mkfifo("/tmp/dumbPipe", 0666) 但是一旦我执行了代码并检查了未设置写入位的权限,我最终得到了 pr
我正在尝试使用 mkfifo 命令在 linux 下的 c 上创建一个命名管道。但是当我运行该程序时,我要么收到“没有这样的文件或目录”错误,要么什么也没有(控制台不显示任何内容) 这是我的代码: #
#include #include #include #include #include #include #include int main(void) { if(mkfifo
据我了解,根据https://linux.die.net/man/3/mkfifo , 我得到一个暗示,我必须有读取器和写入器文件,才能 利用管道文件。下面的来源是编写器文件, #include #
我有以下代码,我从 Xcode 中的 Swift 主程序调用它,例如在虚拟 iPhone 的模拟器中运行它时,它可以工作。它创建/tmp/MYFIFO。 int32_t init_udpC(void)
我在命名 Linux BASH、命名管道等方面相当陌生。我正在关注这篇文章中的一个例子: https://www.linuxjournal.com/content/using-named-pipes-
我正在编写一个脚本来设置机器环境。我有能力在机器上放置一个启动脚本,所以我试图在我的“工作站”机器上使用 unix 中的命名管道在线。 问题是,我无法控制这些机器何时可以联机。总共有 20 多台机器同
gcc (GCC) 4.7.2 c89 我正在使用管道 mkfifo。我有一个读者和一个作家。 我希望读者阻塞,直到文件中有内容。 有一个标志可以设置为非阻塞模式的 O_NONBLOCK。所以默认情况
我使用 mkfifo 创建命名管道。然后我使用下面的程序打开它。但是,程序卡在“fopen”行。这里有什么问题吗? int main(int argc, char** argv) { char* li
我想执行一个 bash 脚本来执行以下操作: 应用程序“ffmpeg”生成一个实时传输流 (.ts) 文件。我需要处理这个实时流(执行解复用等)。 现在我知道这必须通过 FIFO 来完成;但这是我的任
我正在使用命名管道来捕获另一个程序 (MATLAB) 中的外部程序 (wgrib2) 的输出。 MATLAB 代码如下,system()访问命令行以制作管道: system('mkfifo myfif
我已经尝试调试这个问题几个小时了,但我仍然卡住了...... 我在这段代码中遇到了“mkfifo”调用的段错误(它只是我整个代码的一部分,因为我认为其余部分与这里无关): #include "mark
我有一个动态加载的库,可以计算一个特殊值。我的程序需要访问该值(在 C 或 C++ 中)。我想到了命名管道。但他们对于这个目的似乎有些奇怪。如果通过管道实现,我的库会在文件中写入一个值,然后我的程序会
我正在尝试用 C 创建命名管道,但没有成功。 这是我的代码: pid_t pid = getpid() ; char * pipeNameo = malloc( sizeof(char) * 100
我正在尝试用 C 创建命名管道,但没有成功。 这是我的代码: #define FIFO_NAME "/tmp/myfifo" int main(){ int fd; fd = mkfi
我正在尝试编写两个使用 fifo 管道相互通信的程序。我使用了例子here (第 5.2 节),但我将那里的 mknod 更改为 mkfifo 并尝试将 gets 更改为 fgets。这是代码(写入
我试图用 FIFO 做一些简单的事情:读取行,但不是一次全部读取,结果出乎意料地“不起作用”。 没关系: $ f=$(mktemp -u) $ mkfifo $f $ { seq 5 > $f; }
我使用 mkfifo 创建命名管道。然后我用下面的程序打开它。但是,程序在“fopen”行挂起。这里有什么问题吗? int main(int argc, char** argv) { char* li
我是一名优秀的程序员,十分优秀!