
正文
linux的命令管道实现 linux中管道的用法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
linux重定向和管道命令
echo "gnome-terminal "commands" " /dev/pts/1 ?
创建两个空文件file1、file2,使用vi编辑器给file1和file2添加文本内容并保存,利用重定向功能实现将文件file1与file2的内容写到文件file3命令该怎么打啊 求帮忙
相关问答
Q1: linux 管道原理?
Linux原理的学习,我打算由浅入深,从上之下,也就是先了解个大概再逐个深入。先了解一下Linux的进程先。
一、Linux进程上下文
Linux进程上下文,我理解就是进程组成元素的集合。包括进程描述符tast_struct,正文段,数据段,栈,寄存器内容,页表等。
1)tast_struct
它是一种数据结构,存储着进程的描述信息,例如pid,uid,状态,信号项,打开文件表等。是进程管理和调度的重要依据。
2)用户栈和核心栈
顾名思义,用户栈是进程运行在用户态使用的栈,含有用户态执行时候函数调用的参数,局部变量等;核心栈是该进程运行在核心态下用的栈,保存调用系统函数所用的参数和调用序列。这两个栈的指针都保存在tast_struct结构中。
3)寄存器
保存程序计数器,状态字,通用寄存器,栈指针。
4)页表
线性地址到物理地址的映射
5)正文段,数据段。
二、Linux进程的状态
Linux中进程共有5个状态:就绪,可中断睡眠,不可中断睡眠,暂停,僵死。也就是说,linux不区分就绪和运行,它们统一叫做就绪态。进程所处的状态记录在tast_struct中。
三、进程的控制
1)进程树的形成
计算机启动后,BIOS从磁盘引导扇区加载系统引导程序,它将Linux系统装入内存,并跳到内核处执行,Linux内核就执行初始化工作:初始化硬件、初始化内部数据结构、建立进程0。进程0创建进程1,进程1是以后所有创建的进程的祖先,它负责初始化所有的用户进程。进程1创建shell进程,shell进程显示提示符,等待命令的输入。
2)进程的创建
任何一个用户进程的创建都是由现有的一个进程完成的,进程的创建要经过fork和exec两个过程。Fork是为新进程分配相应的数据结构,并将父进程的相应上下文信息复制过来。Exec是将可执行文件的正文和数据转入内存覆盖它原来的(从父进程复制过来的),并开始执行正文段。
3)进程的终止
系统调用exit()就可自我终结,exit释放除了tast_struct以外的所有上下文,父进程收到子进程终结的消息后,释放子进程的tast_struct。
4)进程的调度
进程的调度是由schedule()完成的,一种情况是,当处理机从核心态向用户态转换之前,它会检查调度标志是否为1,如果是1,则运行schedule(),执行进程的调度。另一种情况是进程自动放弃处理机,时候进行进程调度。
进程的调度过程分为两步,首先利用相关策略选择要执行的进程,然后进行上下文的切换。
四、进程的通信
进程的通信策略主要有,消息,管道,消息队列,共享存储区和信号量。
1)信息
消息机制主要是用来传递进程间的软中断信号,通知对方发生了异步事件。发送进程将信号(约定好的符号)发送到目标进程的tast_struct中的信号项,接收进程看到有消息后就调用相应的处理程序,注意,处理程序必须到进程执行时候才能执行,不能立即响应。
2)管道
我理解就是两个进程使用告诉缓冲区中的一个队列(每两个进程一个),发送进程将数据发送到管道入口,接收进程从管道出口读数据。
3) 消息队列
消息队列是操作系统维护的一个个消息链表,发送进程根据消息标识符将消息添加到制定队列中,接收进程从中读取消息。
4)共享存储区
在内存中开辟一个区域,是个进程共享的,也就是说进程可以把它附加到自己的地址空间中,对此区域中的数据进行操作。
5)信号量
控制进程的同步。
Q2: 如何向测试人员介绍linux中的管道命令“|”这个概念?
管道的概念:一个命令的输出可以通过管道做为另一个命令的输入。为方便理解,我们先来想象一个大家都熟悉的场景:为避免下雨的时候,水漫马路,一条马路,两边都有路沟。那么马路左边的路沟积水如何流入到右边的路沟呢?就可以通过地下埋入一根地下管道。所以这个场景中,管道的作用就是连接马路两边路沟的。在linux中,管道命令“|”也是一样的,也是起连接作用,只不过连接不是路沟而是linux命令。所以如果要使用管道的话,就意味着我们要使用三个命令(一个是管道命令,另两个就是要连接的命令)。管道前面的命令一定要在终端上能有输出,比如ls,find之类的命令,管道后面的命令一般就是两个,more和grep,举个例子:find . -name '*.txt' | grep ‘1.txt’。 总结:管道最主要是和grep进行结合应用,做过滤查询使用。在黑马程序员教课时候就会经常给学生讲解这个知识点。
Q3: Linux的管道命令如何使用?
让我来告诉你答案!管道不支持像,lsmvcp等,
如果要用到这些命令,就要在管道后加参数:xarg
如:whichtouch|xargls-la就行了。
Q4: 编写一个linux的管道程序
对此程序有问题,可以baidu 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 */
dup(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 */
dup(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;
}
Q5: Linux 的管道命令如何使用?
管道不支持像,ls mv cp 等,
如果要用到这些命令,就要在管道后加参数:xarg
如:which touch | xarg ls -la 就行了。
linux的命令管道实现的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux中管道的用法、linux的命令管道实现的信息别忘了在本站进行查找喔。






