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 a0f261c65334e95a51e140f980e47e3f03598899..860c46720823f19c769555c170a322765565f509 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