下面看看重定向的概念:
先做一个演示程序:
CODE:
| /**//* ============================================================================ Name : execlp_example.c Author : newflypig Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> int main(void) ...{ int filedes; if((filedes=open("dd.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))<0) fprintf(stderr,"%s ","open file error"); close(1); dup(filedes); close(filedes); execlp("ls","-l",(char * )0); return 0; } |
这是一段输出重定向的程序,为了解释方便,首先了解一下Linux中标准输入输出文件,Linux中基本上所有的元素都可以理解为文件,包括文件夹,设备等。程序中,首先使用close(1)关闭标准输出端子,{/*当然如果你想输入重定向的话可以关闭标准输入端子,它的序列是0;序列为3的端子是异常抛出端子,一般可以让此端子与输出设备保持一致。*/}, 然后使用dup函数将main函数的第一步所创建的名为dd.txt的文件设置为此程序的输出设备。接着要关闭该文件的连接,释放资源锁以便让程序来对此 文件进行读写。最后一步调用execlp函数进行命令的执行,这里执行了一个ls的命令,让当前目录下的所有文件名输出,execlp函数是可变参数函 数,第一个参数需要设置系统环境变量中所能获取的命令文件,或者自己设置绝对路径的命令文件,最后一个参数必须设置为空,以便标记这个函数的参数已经设置 完成,中间的所有参数设置为第一个命令的参数,如此段程序其实是执行ls -l这个命令。这样就将输出信息不直接打印到终端而输出到dd.txt文本文件中,完成输出重定向。
回到管道的问题上来。
如果将 刚刚讲得重定向技术配合fork()进程产生函数,便可以实现管道的作用了。这里说一下思路,就不给具体代码了,也就是设置两个全局的文件变量,将子进程 的输出重定向到其中一个文件变量,因为是全局变量,这个文件变量就被子进程彻底修改了,然后将父进程的输入重定向到刚刚子进程的输出,以此来完成 Linux中的管道机制。
不知各位看观对本人关于Linux中的管道以及重定向问题的看法是否认同,昨晚就看这两个函数的API和源代码了。
综上所述,一个毋庸置疑的结论:Linux编程比Windows编程艰巨而有趣多了。以前从来不高兴碰C语言,认为C++和java此类OO语言才是最人性化,最舒服的编程语言,这次初探C,感受到是另一种源于代码和算法的舒服感。
相关专题
- Linux集群技术 (9049篇文章)
- 体验Linux的音影世界 (8717篇文章)
- Linux驱动大全 (9537篇文章)
- Linux下的路由的配置与应用 (12583篇文章)
- Linux命令简介 (10634篇文章)
- Linux防火墙 (10411篇文章)
- Linux日志专题 (9177篇文章)
- Java编程开发手册 (8565篇文章)
- Linux服务器的安全性能 (21491篇文章)
- 揭秘Linux内存管理 (8783篇文章)
- 三步让你的Ubuntu桌面美观并且高效 (384次浏览)
- Ubuntu自由潮流新宠 挑战微软桌面 (168次浏览)
- 巧用键盘快捷键 让你的Ubuntu 变得更快 (130次浏览)
- 如何在Linux环境下安装Oracle 数据库11g (113次浏览)
- VMware虚拟机中安装Linux的若干问题 (100次浏览)
- Linux FTP服务器和SVN服务器的配置 (98次浏览)
- Vista、XP和Ubuntu Linux多系统安装方法 (80次浏览)
- 实例解析:Linux操作系统的TCP/IP协议栈 (78次浏览)
- 新手学堂:Linux操作系统网络安装总结 (77次浏览)
- 经典文档:Linux网络安全配置基础详解 (68次浏览)



