| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
初识Linux/C语言编程,管道和重定向暨fork与execlp函数的理解
网管下载dl.bitscn.com
Linux中C语言的编程有两个Windows环境下根本无须考虑的问题,关于管道和重定向的概念。
中国网管联盟bitsCN.com
昨晚研究了一个通宵,关于fork()和execlp()函数,基本上用fork函数实现管道,用execlp来实现重定向。不过它们两个实现功能的方法都非常奇怪。
fork函数是让程序创建一个跟自己一模一样的副本,就跟当下流行的很多网络游戏中副本的概念差不多,昨晚在练习的时候忽然感到,这玩意儿又有点像WEB 编程中的表单自提交。在同一个程序里面写两套方案,运行时让其中的一套(安排在fork>=1的分支结构中)调用来自自身代码文件中的另一套方案 (安排在fork==0分支结构)乍一看这跟管道根本就挨不着边,我一开始也是觉得这样,就像一个进程又去调用了一个进程一样,不过另外调用的进程又是本 身,大脑里一团浆糊一样。那么请看代码吧: 网管联盟bitsCN_com
CODE:
网管u家u.bitsCN.com
| /**//* ============================================================================ Name : fork_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 i=1; printf("in the begining,the value=%d ",i); switch(fork())...{ case -1: fprintf(stderr,"%s ","fork error"); break; case 0: printf("child process start,at this time value=%d ",i); i++; printf("child process end,at this time value=%d ",i); break; default: printf("parent process: value=%d ",i); 网管u家u.bitscn@com } return 0; } |
运行结果是这样的: 网管下载dl.bitscn.com
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 网管联盟bitsCN_com
可 以看到父进程首先设置i=1然后调用子进程,子进程一开始就有了父进程的i值,然后子进程在自己的基础上将i++了,子进程结束时输出了i=2。当程序返 回父进程时,子进程的改变并没有影响父进程中i的值,i依然为1。这个fork()的功能仅仅如此,有谁会想到让这个函数在Linux最具特色的管道机制 中大显伸手呢。 中国网管论坛bbs.bitsCN.com
花开两朵,各表一枝。 中国网管论坛bbs.bitsCN.com
|
0
|
评论加载中…