室内设计接单网站,图片网站源码asp,vs2008 手机网站开发,网站被降权怎么恢复管道命令 #include unistd.h int pipe(int pipefd[2]); 在Linux中#xff0c;管道#xff08;pipe#xff09;的返回值是一个整数数组#xff0c;包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。 当成功创建一个管道时#xff0c;pipe() 系统调用…管道命令 #include unistd.h int pipe(int pipefd[2]); 在Linux中管道pipe的返回值是一个整数数组包含两个文件描述符。这两个文件描述符分别代表管道的读端和写端。 当成功创建一个管道时pipe() 系统调用会返回0并将文件描述符存储在提供的数组中。文件描述符是非负整数通常是从3开始递增的。文件描述符中索引为0的表示标准输入stdin索引为1的表示标准输出stdout索引为2的表示标准错误输出stderr。 例如如果使用以下代码创建了一个管道 若创建成功ret 的值将为0fd 数组的第一个元素 fd[0] 将为读端的文件描述符fd 数组的第二个元素 fd[1] 将为写端的文件描述符。 需要注意的是创建管道失败时pipe() 系统调用会返回-1并设置适当的错误码。在这种情况下通过检查错误码可以确定具体的失败原因。 管道介绍 管道是一种单向数据流它有一个读端和一个写端。 当父进程创建一个管道后它会得到两个文件描述符一个用于读取管道数据一个用于写入管道数据。接着父进程会创建一个子进程。子进程继承了父进程的文件描述符。 在Linux中管道被称为半双工half-duplex这意味着它只能进行单向数据流的传输。具体而言管道可以提供两个方向的数据流一个是从写端到读端的方向另一个是从读端到写端的方向。但是不能同时在这两个方向上进行读写操作。 当父进程创建一个管道后可以通过写端向管道中写入数据然后通过读端从管道中读取数据。但是父进程不能同时使用同一个管道进行读写操作。同样子进程也可以使用同一个管道进行读写操作但是也不能同时进行。 管道的特点 管道是单向同行的也叫半双工管道的本质是文件因为fd的生命周期随进程管道的生命周期也是随进程的管道通信通常用来进行具有“血缘”关系的进程进行进程间通信。常用于父子通信。在管道通信中写入的次数和读取的次数不是严格匹配的。 具有一定的协同能力让read和write能按照一定的步骤进行通信 管道的四种场景 如果我们read读取完毕了所有管道数据如果读端没有写入那么写端就会一直等待如果我们write端写满后我们就会停止写入直到读端读取数据后才可以正常写入如果我们关闭了写端当读端将写端最后的数据读取完再度取是就会返回0表示已经读到了文件结尾。如果写端一直写读端关闭那么系统将直接通过kill -13进行终止 匿名管道的退出 因为当管道的读端关闭后写端也会随之关闭当我们让父进程进程读子进程进行写时我们关闭写端后子进程是否会正常退出我们来认识分析一下 命名管道的退出 mkfifo用于创建一个FIFO命名管道文件。FIFO文件在使用后会保留在文件系统中不会自动删除。 如果想要自动删除需要用到unlink命令在调用unlink函数后它会尝试删除指定的文件。如果成功删除文件unlink将返回0否则返回-1并且此时可以通过errno变量获取错误信息。