现在的位置: 首页 > 综合 > 正文

pipe在ota升级中通信

2018年01月17日 ⁄ 综合 ⁄ 共 609字 ⁄ 字号 评论关闭

pipe fd[2]有两个端口,一端只能用于读,由描述字fd[0]表示,称其为管道读端;另一端则只能用于写,由描述字fd[1]来表示,称其为管道写端。

在ota升级中需要一个画ui的,还有一个是执行脚本文件的。两者之间是通过pipe来实现通信;

1.在fork子进程中“close(pipefd[0]);”来关掉读取的端口;只进行写的操作

执行脚本时,类似打开文件方式来操作管道: FILE* cmd_pipe = fdopen(fd, "wb");

        fprintf(((UpdaterInfo*)(state->cookie))->cmd_pipe,
                "ui_print %s\n", line);

2.在父进程中 “close(pipefd[1]);”关掉写的端口,只进行读的操作

打开读的管道:FILE* from_child = fdopen(pipefd[0], "r");

读取管道的缓存“fgets(buffer, sizeof(buffer), from_child)”,不断读取进度、字符串等信息,然后在刷到屏幕

参考:

http://cpp.ezbty.org/content/science_doc/linux%E4%B8%8B%E8%BF%9B%E7%A8%8B%E9%97%B4%E9%80%9A%E4%BF%A1%EF%BC%9A%E7%AE%A1%E9%81%93_pipe%E5%87%BD%E6%95%B0

抱歉!评论已关闭.