fork,execl,dup2

本文通过实例讲解了fork、dup2和exec系列函数的使用方法,详细解释了这些函数在进程创建、文件描述符重定向及进程替换中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fork execl dup2

 

实习需要用到上面的几个函数。先通过一个简单的例子来学习一下。

 

先写一个a.c代码输出hello

 

 

附:

 

 

 

在b.c代码中fork一个进程,将a.c的输出重定位到OUTPUT.txt中。

 

fork()函数。一个现有进程可以调用fork函数创建一个新进程。 由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。 两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。返回负值表示出错。

 

Dup2()函数。位于/usr/include/unistd.h中,函数声明形式

int dup2(int oldfd, int newfd); 第二个参数通常为0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),与标准输入、标准输出、标准错误输出相关联。比如上面的代码就是将标准输出和标准错误重定位到了OUTPUT.txt中

 

注:STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。

操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。

STDIN_FILENO表示标准输入,同样,标准输出用STDOUT_FILENO,标准出错用STDERR_FILENO.

 

 

execl()函数。

在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。

当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。

例如:在shell命令行执行ps命令,实际上是shell进程调用fork复制一个新的子进程,在利用exec系统调用将新产生的子进程完全替换成ps进程。

exec系列函数原型:

 

 

在文件夹下编译使用g++ -o a a.c; g++ -o b b.c.  执行b就可以看到OUTPUT.txt中的输出内容

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值