zoukankan      html  css  js  c++  java
  • 关于FD_CLOEXEC标志

     
    FD_CLOEXEC用来设置文件的close-on-exec状态标准。在exec()调用后,close-on-exec标志为0的情况,
    此文件不被关闭。非零则在exec()后被关闭。默认close-on-exec状态为0,需要通过FD_CLOEXEC设置。
    #include <stdio.h>

    #include <unistd.h>
    #include <fcntl.h>

    extern char **environ;

    int main(int argc,char *argv[])
    {
    int flag;
    int ret;

    flag = fcntl(1,F_GETFD,0);
    printf("close-on-exec is %d\n",flag);

    fcntl(1,F_SETFD,flag|FD_CLOEXEC);
    flag = fcntl(1,F_GETFD,0);
    printf("close-on-exec is %d\n",flag);

    //system("ls -l");
    ret = execve("/bin/ls",argv,environ);
    if(ret == -1)
    {
    printf("FAULT!\n");
    }
    printf("AH!!!!!\n");
    return 0;
    }

    系统调用exec族是用来执行一个可执行文件来代替当前进程的执行映像。需要注意的是,该调用并没有生成

    新的进 程,而是在原有进程的基础上,替换原有进程的正文,调用前后是同一个进程,进程号PID不变。

    但执行的程序变了(执行的指令序列改变了)。因其在执行可执行文件的时候,

    在可执行文件结束有运行return 0,所以就不会再执行下边的printf("AH!!!!!\n");

    加上FD_CLOEXEC后是关闭文件描述符1,也就是标准输出1,所以ls运行的结果不会显示出来了。

    不加FD_CLOEXEC就会打印出ls的运行结果。

  • 相关阅读:
    de4dot 反混淆
    GreyMagic
    HearthBuddy 第一次调试
    dnSpy
    asp.net form submit 在Chrome里面看Form提交
    关于并发模型 Actor 和 CSP
    Go语言并发机制初探
    CyclicBarrier的工作原理及其实例
    Java并发编程--CyclicBarrier
    CountDownLatch的简单理解
  • 原文地址:https://www.cnblogs.com/xiayong123/p/3717491.html
Copyright © 2011-2022 走看看