进程将fd重定向后对exec的影响
我们使用两个测试程序来验证,
test.cpp用来实现从标准输入读入数据,然后将数据原样输出。代码如下:
test.cpp
-
#include <unistd.h>
-
#include <stdlib.h>
-
#include <stdio.h>
-
#define BUFFSIZE 1024
-
using namespace std;
-
-
int main(void)
-
{
-
char buf[BUFFSIZE];
-
int n;
-
while( (n=read(STDIN_FILENO,buf,BUFFSIZE))>0) //从标准输入读取数据
-
write(STDOUT_FILENO,buf,n); //向标准输出输出数据
-
exit(0);
-
}
编译运行如下:
test1的作用是将标准输入重定向到打开的文件(这里选择打开自己的源码test1.cpp),然后执行test。
test1.cpp
-
#include <stdio.h>
-
#include <unistd.h>
-
#include <stdlib.h>
-
#include <stdlib.h>
-
#include <fcntl.h>
-
#define MAXLINE 1024
-
using namespace std;
-
int main(int argc, char *argv[])
-
{
-
int fd;
-
if((fd=open("./test1.cpp",O_RDONLY))==-1)//打开程序自身的源文件
-
{
-
perror("open");
-
exit(1);
-
}
-
dup2(fd,STDIN_FILENO); //将fd复制到标准输入(将标准输入重定向到fd,即test1.cpp文件)
-
-
if( (execl("./test",(char*)0))==-1 ) //执行test程序
-
{
-
perror("execl");
-
exit(1);
-
}
-
}
我们执行test1效果如下:
可见test进程的标准输入也被重定向到了test1.cpp文件。实验结果表明,在不设置CLOSE_ON_EXEC标准时,执行exec后进程保持之前的文件描述符状态。
阅读(4658) | 评论(0) | 转发(0) |