linux 自定义外壳,管道在自定义的linux外壳
尝试实现我自己的Linux外壳几个基本功能,当然是时候实现管道的问题。更具体的管道工程大部分,尽管似乎放弃了最后一个论点。例如,如果我要运行命令管道在自定义的linux外壳
ps ax | grep ps
将grep命令后的ps放在我的shell中。因此,而不是输出这是使用典型的Linux外壳
339 ? S 0:00 upstart-udev-bridge --daemon
497 ? Ss 0:00 /usr/sbin/cupsd -F
503 ? S< 0:00 [kpsmoused]
720 ? S 0:00 upstart-socket-bridge --daemon
5541 pts/0 R+ 0:00 ps ax
5542 pts/0 S+ 0:00 grep --colour=auto ps
显示你得到这个
339 ? S 0:00 upstart-udev-bridge --daemon
497 ? Ss 0:00 /usr/sbin/cupsd -F
503 ? S< 0:00 [kpsmoused]
720 ? S 0:00 upstart-socket-bridge --daemon
5557 pts/0 R+ 0:00 ps ax
在这种情况下你不寻找匹配模式PS。
如下
void mypipes(char* args[], int nargs)
{
pid_t pid;
int fd[2];
char* cmdargs[nargs - 2];
char* cmdargs2[nargs - 2];
int i;
int t = 0;
int count = 0;
for(i = 0; i < nargs; i++)
{
if(!strcmp(args[i], "|"))
{
//dont put into array
t = 1;
}
else if(t == 0)
{
cmdargs[i] = args[i];
count++;
}
else if(t == 1)
{
cmdargs2[i - 3] = args[i];
}
}
if(count == 2)
{
pipe(fd);
pid = fork();
if(pid == -1)
{
perror("unable to fork");
exit(1);
}
if(pid > 0)
{
wait(&pid);
close(fd[1]);
close(0);
dup2(fd[0],0);
execlp(cmdargs2[0], cmdargs2[0], cmdargs2[1], NULL);
}
if(pid == 0)
{
close(fd[0]);
close(1);
dup2(fd[1],1);
execlp(cmdargs[0], cmdargs[0], cmdargs[1], NULL);
}
}
if(count == 1)
{
pipe(fd);
pid = fork();
if(pid == -1)
{
perror("unable to fork");
exit(1);
}
if(pid > 0)
{
wait(&pid);
close(fd[1]);
close(0);
dup2(fd[0],0);
execlp(cmdargs2[0], cmdargs2[1], NULL);
}
if(pid == 0)
{
close(fd[0]);
close(1);
dup2(fd[1],1);
execlp(cmdargs[0], cmdargs[1], NULL);
}
}
}
我检查,看看是否管后,所有的变数仍然是第二组参数中,他们是问题的管道运行的作用不是主要的,但我正在执行实际管道的地方,它不会读到最后。
非常感谢您提供有关可能出现错误的提示。
linux 自定义外壳,管道在自定义的linux外壳相关推荐
- linux怎么打出管道命令这个符号,linux 管道命令 竖线 ‘ | ’
管道符号,是unix功能强大的一个地方,符号是一条竖线:"|", 用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为comm ...
- Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)
实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...
- Linux系统启动流程(4)制作自定义linux之一
Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一 ...
- linux系统下对硬盘自定义分区格式化的分析与实现
前言: 在这个数据爆炸的时代,数据存储也显得尤为的重要.存储形式从原来的U盘,SD卡硬盘发展到现在的网络存储,云存储.存储空间也是从原来的M大小到现在动辄T为单位的大容量存储.因为工作关系有接触数据存 ...
- Linux中的管道与重定向
前言: 这篇博文主要参考了鸟哥的<鸟哥的Linux私房菜>和杨鹏(NetSnake)的<Linux服务器架设>这两本书,以及在网络上查阅的资料.此博文作为我阅读<鸟哥的L ...
- linux用pipe创建的文件类型,linux文件类型之 管道
inux 管道管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别.有名管 ...
- Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)
整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...
- linux pipe 阻塞,Linux pipe():從管道中讀取數據並不總是能夠解阻塞寫入器
I have a problem using pipe under Linux. I would like to fill a pipe to make further write's call bl ...
- opipe--一款基于java的自定义“命令”管道
opipe是一个"命令"管道,其设计思路与linux的命令管道一致.不同的是,linux的命令管道串联了一组命令,命令间是以输入.输出流串联在一起的.而opipe实际为一个操作(函 ...
最新文章
- CMakeLists.txt文件如何编写?(一 基础篇)
- html禁止手机文字放大,js实现移动端微信页面禁止字体放大
- 尚学堂requireJs课程---2、模块
- 面试官:Maven 的这 7 个问题你思考过没有?
- mysql 排序后在查询
- CANoe 13 demo 下载和激活-转载
- 汉王手写板linux驱动下载,汉王科教手写板易教2.0驱动
- Goole helper使用
- Linux网络编程 - 在服务器端运用进程间通信之管道(pipe)
- 蓝牙耳机品牌排行榜,连接稳定的四款蓝牙耳机分享
- 概率论3——古典概型与二项分布
- 元器件封装标准IPC-7351及电子开发论坛集合
- Api --String知识点
- java比较两个对象_java判断两个对象是否相等的方法
- 整数二分详解---yxc
- JS/jQuery 遍历对象属性
- 洛谷P1101 单词方阵
- sv中静态属性和静态方法
- 阿里云大学推出云学院中小企业学习优惠方案,加速提升企业云时代人才竞争力
- 四元数 右手系-左手系 转换