初识Linux/C语言编程,管道和重定向暨fork与execlp函数的理解
初识Linux/C语言编程,管道和重定向暨fork与execlp函数的理解Linux中C语言的编程有两个Windows环境下根本无须考虑的问题,关于管道和重定向的概念。fork函数是让程序创建一个跟自己一模一样的副本,就跟当下流行的很多网络游戏中副本的概念差不多,昨晚在练习的时候忽然感到,这玩意儿又有点像WEB 编程中的表单自提交。在同一个程序里面写两套方案,运行时让其
·
初识Linux/C语言编程,管道和重定向暨fork与execlp函数的理解
Linux中C语言的编程有两个Windows环境下根本无须考虑的问题,关于管道和重定向的概念。 fork函数是让程序创建一个跟自己一模一样的副本,就跟当下流行的很多网络游戏中副本的概念差不多,昨晚在练习的时候忽然感到,这玩意儿又有点像WEB 编程中的表单自提交。在同一个程序里面写两套方案,运行时让其中的一套(安排在fork>=1的分支结构中)调用来自自身代码文件中的另一套方案 (安排在fork==0分支结构)乍一看这跟管道根本就挨不着边,我一开始也是觉得这样,就像一个进程又去调用了一个进程一样,不过另外调用的进程又是本 身,大脑里一团浆糊一样。那么请看代码吧:
in the begining,the value=1 child process start,at this time value=1 child process end,at this time value=2 parent process: value=1 可 以看到父进程首先设置i=1然后调用子进程,子进程一开始就有了父进程的i值,然后子进程在自己的基础上将i++了,子进程结束时输出了i=2。当程序返 回父进程时,子进程的改变并没有影响父进程中i的值,i依然为1。这个fork()的功能仅仅如此,有谁会想到让这个函数在Linux最具特色的管道机制 中大显伸手呢。 花开两朵,各表一枝。 下面看看重定向的概念: 先做一个演示程序:
回到管道的问题上来。 如果将 刚刚讲得重定向技术配合fork()进程产生函数,便可以实现管道的作用了。这里说一下思路,就不给具体代码了,也就是设置两个全局的文件变量,将子进程 的输出重定向到其中一个文件变量,因为是全局变量,这个文件变量就被子进程彻底修改了,然后将父进程的输入重定向到刚刚子进程的输出,以此来完成 Linux中的管道机制。 不知各位看观对本人关于Linux中的管道以及重定向问题的看法是否认同,昨晚就看这两个函数的API和源代码了。 综上所述,一个毋庸置疑的结论:Linux编程比Windows编程艰巨而有趣多了。以前从来不高兴碰C语言,认为C++和java此类OO语言才是最人性化,最舒服的编程语言,这次初探C,感受到是另一种源于代码和算法的舒服感。 |
更多推荐
已为社区贡献1条内容
所有评论(0)