From a42d102f37fd4c1dded4e35880cafa6f5c453150 Mon Sep 17 00:00:00 2001 From: tanzhuolin <1045021517@qq.com> Date: Sat, 19 Feb 2022 17:53:32 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E3=80=91=E5=AE=8C=E5=96=84=E3=80=8A=E5=A4=9A=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E9=9D=9E=E9=98=BB=E5=A1=9E=E7=BD=91=E7=BB=9C=E7=BC=96=E7=A8=8B?= =?UTF-8?q?=E3=80=8B=E7=AB=A0=E8=8A=82=E7=9A=84=20pipe=20=E4=BB=8B?= =?UTF-8?q?=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../network/an0019-tcpclient-socket.md | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/rt-thread-version/rt-thread-standard/application-note/components/network/an0019-tcpclient-socket.md b/rt-thread-version/rt-thread-standard/application-note/components/network/an0019-tcpclient-socket.md index a0f261c..860c467 100644 --- a/rt-thread-version/rt-thread-standard/application-note/components/network/an0019-tcpclient-socket.md +++ b/rt-thread-version/rt-thread-standard/application-note/components/network/an0019-tcpclient-socket.md @@ -92,10 +92,35 @@ int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, struct ### pipe -pipe 是一个基于文件描述符的单向数据通道,可用于线程间的通信。 +pipe 是一个基于文件描述符的单向数据通道(管道),可用于线程间的通信。我们可以将 pipe 理解为水管,水通过水管从一端流向另一端,就像我们的数据从一个线程流向另一个线程,以此来达到线程间通信的目的。管道本质上也是一个文件,因此它支持文件描述符的形式操作,也就是说我们可以通过 open、read、write 等函数对管道进行操作。 -在 RT-Thread 里面,pipe 支持文件描述符的形式操作,而且 pipe 不需要控制协议,操作简单。 +在使用管道之前,需要先创建它,我们通过调用 rt_pipe_create 函数来创建管道: +```c +rt_pipe_t *rt_pipe_create(const char *name, int bufsz); +``` + +| 参数 | 描述 | +| -------- | ------------------------------------------------------- | +| name | 管道名 | +| bufsz | 管道大小 | +| **返回** | -- | +| 管道句柄 | 创建管道对象成功 | +| RT_NULL | 创建失败 | + +创建成功以后,就能通过这个管道名来对管道进行读写操作,下面截取了示例代码 `tcpclient.c` 的部分代码片段,如下: + +```c +/* 只读方式打开管道 */ +thiz->pipe_read_fd = open(dev_name, O_RDONLY, 0); + +/* 只写方式打开管道 */ +thiz->pipe_write_fd = open(dev_name, O_WRONLY, 0); + +/* 对管道写入数据 */ +write(thiz->pipe_write_fd, buff, len); + +``` > 提示:在 msh />中,输入 `list_fd` 可查看当前打开的文件描述符,详情如下: ```c -- Gitee