导航:首页 > 操作系统 > linux创建管道

linux创建管道

发布时间:2022-05-21 16:24:08

1. 命名管道的linux实例

此示例代码意在体现出命名管道与普通管道的区别,命名管道是以一个普通文件的形式出现的,包括三个文件操作:创建命名管道、写管道、读管道。
1. 创建命名管道
#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<fcntl.h>intmain(void){charbuf[80];intfd;unlink(zieckey_fifo);mkfifo(zieckey_fifo,0777);}写命名管道代码 #include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<fcntl.h>intmain(void){intfd;chars[]=Hello! ;fd=open(zieckey_fifo,O_WRONLY);while(1){write(fd,s,sizeof(s));sleep(1);}return0;}读命名管道代码 #include<sys/types.h>#include<sys/stat.h>#include<unistd.h>#include<fcntl.h>intmain(void){intfd;charbuf[80];fd=open(zieckey_fifo,O_RDONLY);while(1){read(fd,buf,sizeof(buf));printf(%s ,buf);sleep(1);}return0;}

2. 系统linux 下的 管道 和 重定向 这两个概念怎么理解

管道是一个先进先出的特殊文件,一方只能依次写进去,另一方也只能依次读出来
理解管道符前先要知道一个进程运行后有3个最基本的文件,标准输入(0表示),标准输出(1表示),错误输出(2表示)
通过命令查看当前3个基本文件,ls-l/proc/$$/fd/
shell中的管道符做了3件事,
1,先创建一个管道文件pipe
2,将管道符前面的一个命令的标准输出替换为pipe
2,将管道符后面的一个命令的标准输入替换为pipe
例子
echotest>/tmp/test
tail-f/tmp/test|cat&
查看tail命令3个基本文件
ls-l/proc/`pidoftail`/fd
查看cat命令3个基本文件
ls-l/proc/`pidofcat`/fd
shell重定向本身从编程角度理解就是赋值语句,0,1,2本身理解为3个变量,
<和>表示赋值符号,变量名只能用数字表示,变量只能在/proc/进程pid/fd/下查看
<以只读方式打开一个文件,然后把打开的文件赋值给变量
>以只写方式打开一个文件,然后把打开的文件赋值给变量
<>以读写方式打开一个文件,然后把打开的文件赋值给变量
exec1<>/tmp/info表示读写打开/tmp/info,然后赋值给变量1,执行后其他命令打印的信息都会输入到/tmp/info里,默认所有的打印信息(echoaaaaaa)都会获取变量1里面打开的文件,然后把要打印的信息写到这个文件里面
如果写成exec1</tmp/info这种方式,那么打印的信息就没法写进去了,因为是只读方式打开的
ls-l/dev/fd/或者ls-l/proc/$$/fd/查看
cat/proc/cmdline>/tmp/cmd通常啥这种写法,赋值符号前面没写具体的变量名,默认就是1,也就是cat/proc/cmdline1>/tmp/cmd
echor>/tmp/r&&exec6</tmp/r
lsof|grep/tmp/r可以查看到6r属性,文件以读方式开打,并且复制给变量6

3. linux下为什么创建管道成功,打开管道却失败呢

代码贴出来看看呢?
打开管道失败,一般要注意打开的方式,一般不能以读写方式打开,要么只读打开,要么只写打开,否则会出错。
如果以O_NONBLOCK 非阻塞方式打开的话,管道的另一端也要同时要打开。

4. Linux C: 1、启动A进程,创建一有名管道,并向其写入一些数据 2、启动B进程,从A创建的有名管道中读出数据

01 #include<stdio.h>
02 #include<unistd.h>
03
04 int main()
05 {
06 int n,fd[2]; // 这里的 fd 是文件描述符的数组,用于创建管道做准备的
07 pid_t pid;
08 char line[100];
09 if(pipe(fd)<0) // 创建管道
10 printf("pipe create error\n");
11
12 if((pid=fork())<0) //利用 fork()创建新进程
13 printf("fork error\n");
14
15 else if(pid>0){ //这里是父进程,先关闭管道的读出端,然后在管道的写端写入“hello world"
16 close(fd[0]);
17 write(fd[1],"hello word\n",11);
18 }
19 else{
20 close(fd[1]); //这里是子进程,先关闭管道的写入端,然后在管道的读出端读出数据
21 n= read(fd[0],line,100);
22 write(STDOUT_FILENO,line,n);
23 }
24 exit(0);
25 }

5. linux shell脚本怎么创建命名管道

man mkfifo

Create named pipes (FIFOs) with the given NAMEs.

6. 在Linux里,所有命令都可用于构造管道吗

管道举例:ls -a | grep mysql 说明:就是把前一个命令的结果当成后一个命令的输入。结合本例就是先显示所有的文件,然后再用grep命令在ls的结果中查找包含mysql的文件。

7. 编写一个linux的管道程序

对此程序有问题,可以 hi我。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
int pid1, pid2;
int pfd[2];

pipe(pfd);

pid1 = fork();
if (pid1 == 0)
{
char * argv[] = {
"echo",
"good morning",
NULL
};
/* left child */
close(pfd[0]);
close(1); /* close stdout */
p(pfd[1]); /* redirect stdout to pipe */
close(pfd[1]);
execvp("echo", argv);
exit(1);
}

pid2 = fork();
if (pid2 == 0)
{
char *argv[] = {
"sed",
"s/good/hi/g",
NULL
};

/* right child */
close(pfd[1]);
close(0); /* close stdin */
p(pfd[0]); /* redirect stdin to pipe */
close(pfd[0]);
execvp("sed", argv);
exit(1);
}

close(pfd[0]);
close(pfd[1]);
wait(NULL);
wait(NULL);
printf("Both children exited.\n");
return 0;
}

8. Linux系统中mkfifo创建管道后,调用open打开失败,不知道错在哪儿

  1. 创建 fifo 时,写 0777 (8进制的 777)

  2. 你用了 nonblock 方式去打开fifo的写端,此时fifo的读端没有人open,所以一定会返回失败。必须先有人以读的方式打开fifo后,才能以nonblock方式打开写。或者去掉 O_NONBLOCK 参数。

9. 如何才能在linux下建立全双工管道

只要理解了什么是管道,就很简单了 管道“| ”就是将前面命令输出作为管道后面命令的输入 如: ls -a | grep test | awk "{print $1}" 就是将ls -a 显示的结果,在帅选出含有test,然后打印出第一列。

10. linux中管道是指什么,重定向是指什么

管道是把一个命令的输出作为下一个命令的输入,
如 ls /etc | more
cat /etc/passwd | grep root
重定向是把一个命令的输出重定向到另一个文件
如 echo 'hello' > abc.txt 一个大于号是抹除源文件内容并写入,如果没有这个文件就创建这个文件并写入
echo 'hello world' >> /var/log/messages 两个大于号是追加内容到这个文件,没有这个文件就创建并写入
cat /etc/sysconfig/network-scripts/ifc-eth0 >>abcd.txt

break 2>/dev/null

阅读全文

与linux创建管道相关的资料

热点内容
plc教程pdf 浏览:665
pythonshell清屏命令 浏览:276
检测到加密狗注册服务器失败 浏览:201
解压后手机如何安装 浏览:518
极客学院app为什么下架 浏览:13
图片批量压缩绿色版 浏览:651
东北程序员帅哥 浏览:707
加密封条风噪小 浏览:974
安阳少儿编程市场 浏览:499
云服务器建设原理 浏览:259
javajunit4for 浏览:847
华为服务器如何进阵列卡配置 浏览:435
apache服务器ip地址访问 浏览:719
如何买到安卓手机预装软件 浏览:537
冤罪百度云不要压缩 浏览:88
苏州云存储服务器 浏览:177
解压收纳原声 浏览:387
java注册验证 浏览:377
火花app怎么上推荐 浏览:981
什么app能游戏投屏到电视上 浏览:456