zoukankan      html  css  js  c++  java
  • 关于标准I/O缓冲区和fork函数

    标准I/O库提供缓冲的目的是尽可能减少使用read和write调用的次数。标准I/O提供三个类型的缓冲:全缓冲、行缓冲和不带缓冲。标准输入(stdin)和标准输出(stdout)是行缓冲,标准出错(stderr)是不带缓冲的。行缓冲指当在输入输出中遇到换行符时,标准I/O库执行I/O操作。

    fork函数:

    1 #include <unistd.h>
    2 pid_t fork(void)
    3 /*返回值:
    4  *          子进程中返回0,父进程中返回子进程ID,出错返回-1
    5 */

    子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。子进程获得父进程数据空间、堆和栈的副本。

     1 #include <unistd.h>
     2 #include <stdio.h>
     3 int
     4 main()
     5 {
     6     int i=0;
     7     for(i=0;i<2;i++)
     8     {
     9         fork();
    10         printf("-");
    11     }
    12     printf("
    ");
    13     return 0;
    14 }

    执行该程序结果截图:

    改进一下程序:

     1 #include <unistd.h>
     2 #include <stdio.h>
     3 int
     4 main()
     5 {
     6     int i=0;
     7     for(i=0;i<2;i++)
     8     {
     9         fork();
    10         printf("-");
    11     }
    12     printf("pid=%d
    ",getpid());
    13     sleep(10);
    14     return 0;
    15 }

    运行结果截图:

    本程序会产生4个进程。一个主进程,执行两次输出“-”。一个子进程执行两次输出“-”,另外两个子进程执行一次输出“-”,但是它们被fork生成时复制了父进程的输出缓冲区。

  • 相关阅读:
    DP实验
    Linux shell学习
    线性排序算法-计数排序
    算法笔试题练习
    堆排序
    node.js初识
    linux下vim命令详解
    html5学习笔记
    有趣的参数收集
    算法学习-归并排序
  • 原文地址:https://www.cnblogs.com/xianzhedeyu/p/3311607.html
Copyright © 2011-2022 走看看