• 文件描述符fd、文件指针fp和vfork()


    1.

      fd:在形式上是一个非负整数.实际上他是一个索引值、指向kernal为每一个进程所维护的该进程打开文件的记录表.

        当程序打开一个文件或者创建一个新文件的时候kernal向进程返回一个文件描述符。

      优点:兼容POSIX标准,许多系统调用都依赖于它;缺点:不能移植到unix之外的系统上去

      fp:FILE*指针变量标识符

      优点:是C语言的通用格式,便于移植

     

    2.

      vfork:使用方法同fork差不多,也适用于创建子进程

      vofork特点:

        1)在子进程调用exec或exit之前,它在父进程的空间里运行,会改变父进程的数据段、栈和堆

    eg:      

     int  g_val=0;
      9 int main()
     10 {
     11         pid_t id=vfork();
     12         if(id<0){
     13                 perror("vfork");
     14                 return 1;
     15         }
     16         else if(id==0){//child
     17                 g_val=100;
     18                 printf("child:pid:%d ppid:%d,g_val:%d,&g_val:%p
    ",
     19                         getpid(),getppid(),g_val,&g_val);
     20                 exit(1);
     21         }
     22         else{
     23                 printf("father:pid:%d,ppid:%d,g_val:%d,&g_val:%p
    ",
     24                         getpid(),getppid(),g_val,&g_val);
     25         }
     26        return 027 }

    子进程改变了父进程的值(改变了父进程看到的g_val)

        2)vfork保证子进程先运行 ,在调用了exec()或者exit()之后,父进程才可能被调度运行

         pid_t id=vfork();
     12         if(id<0){
     13                 perror("vfork");
     14                 return 1;
     15         }
     16         else if(id==0){//child
     17                 //g_val=100;
     18                 printf("child:pid:%d ppid:%d
    ",
     19                         getpid(),getppid());
     20                 sleep(3);                                //让子进程先等待3秒再调用exit
     21                 exit(1);
     22         }
     23         else{
     24                 printf("father:pid:%d,ppid:%d
    ",
     25                         getpid(),getppid());
     26         }

     

    结果是:子进程打印,等待3秒(调用了exit),父进程被调度

    安心下来做技术,笑是最大的福气
  • 相关阅读:
    1070 结绳
    1069 微博转发抽奖
    1068 万绿丛中一点红
    1067 试密码
    1066 图像过滤
    1065 单身狗
    CSS--文本溢出与换行
    css--滤镜filter
    css--flex布局
    css--table布局
  • 原文地址:https://www.cnblogs.com/JN-PDD/p/6900961.html
Copyright © 2020-2023  润新知