简介
标准 I/O 库(stdio)及其头文件 stdio.h 为底层 I/O 系统调用提供了一个通用的接口。这个库现在已经成为 ANSI 标准 C 的一部分。
标准 I/O 库提供了许多复杂的函数用于格式化输出和扫描输入。在很多方面,你使用的标准 I/O 库的方式和使用底层文件描述符一样,
需要先打开一个文件以建立一个访问路径,这个操作的返回值将作为其他 I/O 库函数的参数。
在标准 I/O 库中,与底层文件描述符对应的是流(stream,需要注意的是这个流与 C++ 中的输入输出流不一样),
它被实现为指向结构 FILE 的指针(文件指针)。

在启动程序时,有 3 个文件流是自动打开的,它们是 stdin、stdout 和 stderr,

在 stdio.h 中定义,分别代表着标准输入、标准输出和标准错误输出,与底层文件描述符 0、1、2 相对应。

可用的文件流数量与文件描述符一样,都是有限制的,实际的限制由头文件 stdio.h 中定义的 FOPEN_MAX 来定义,它的值至少为 8,在 Linux 系统中,通常是 16。



#在子进程中关闭标准输出,观察对父进程的影响

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
int main(){
int rc=fork();
if(rc==0){
printf("child print a word\n");
fclose(stdout);
printf("not print \n"); }else{
wait(NULL);
printf("father"); } return 0;} [root@localhost codec5]# ./t7
child print a word
father

显然在再子进程中关闭对父进程并没有影响。

下面我们用waitpid使子进程等待父进程,然后再父进程里面调用了fclose(stdout)将标准输出关掉了,父进程后面的没有输出,子进程正常

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
int main(){
int w=(int)getpid();
int rc=fork();
if(rc==0){
waitpid(w,NULL,0);
printf("child print a word\n");
printf("not print \n"); }else{
printf("output\n");
fclose(stdout);
printf("father\n"); } return 0;} [root@localhost codec5]# ./t7
output
[root@localhost codec5]# child print a word
not print

如果在fork前调用fclose(stdout)很显然父子进程均不会有任何输出

如下代码

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
int main(){
fclose(stdout); int rc=fork();
if(rc==0){ printf("child print a word\n");
printf("not print \n"); }else{
printf("output\n"); printf("father\n"); } return 0;} 无输出

linux: c语言 关闭标准输出STDOUT_FILENO对父子进程的影响的更多相关文章

  1. c++ pipe实现父子进程通信

    1.父子进程通信pipe编程流程 -创建管道 -设置进程的输出到管道 -创建进程 -关闭管道写句柄 -读管道读句柄,把数据读到一个buffer里 2.注意事项 -读管道数据的时候,一定要关闭写句柄: ...

  2. LINUX编程学习笔记(十四) 创建进程与 父子进程内存空间

    1什么是进程:进程是一个执行中的程序 执行的程序: 代码->资源->CPU 进程有很多数据维护:进程状态/进程属性 所有进程属性采用的一个树形结构体维护 ps  -a//所有进程 ps - ...

  3. Linux C语言操作MySQL

    原文:Linux C语言操作MySQL 1.MySQL数据库简介 MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源.MySQL有以下特性: (1) 使用C和C++编写, ...

  4. linux c语言 select函数用法

    linux c语言 select函数用法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<unis ...

  5. Linux C语言编程学习笔记 (1)进程控制入门

    想进行Linux系统开发已经很久了,一直没有付诸实践.今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实 ...

  6. Linux C 语言之 Hello World 详解

    目录 Linux C 语言之 Hello World 详解 第一个 C 语言程序 程序运行原理 编译,链接 运行时 链接库 编译器优化 Hello World 打印原理 stdout, stdin 和 ...

  7. Linux C语言编程基本原理与实践

    Linux C语言编程基本原理与实践(2018-06-16 19:12:15) Linux C语言编程基本原理与实践 高效的学习带着目的性: 是什么 -> 干什么 -> 怎么用 重识C语言 ...

  8. linux c语言 select函数使用方法

    linux c语言 select函数使用方法 表头文件 #i nclude<sys/time.h> #i nclude<sys/types.h> #i nclude<un ...

  9. linux进程通信之使用匿名管道进行父子进程通信

    管道:是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件. 管道是单向的.先进先出的.无结构的.固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起 ...

随机推荐

  1. mac电脑上安装appium报错:Failed at the appium-chromedriver@4.25.1 postinstall script.

    mac电脑安装appium,装好node.js后,使用命令:npm install appium@1.18.0,安装appium,报如下错误 ``` ERR! errno1 ERR! appium-c ...

  2. 多测师讲解自动化测试 _RF连接数据库_高级讲师肖sir

    RF连接数据库:1.Connect To Database(连接数据库)2.Table Must Exist(表必须存在)3.Check If Exists In Database(查询某条件是否存在 ...

  3. day18 Pyhton学习 匿名函数

    匿名函数 别称: lambda表达式 函数,没有名字 def wahaha(n):#wahaha return n**2 print(wahaha.__name__) qqxing = lambda ...

  4. ImageMagick:用identify得到图片的平均颜色(基本颜色/主色调)

    一,平均颜色的用途: 很多app在流式的展示图片时, 在图片没加载出来之前, 不是使用统一的背景图, 而是先显示一个纯色的背景, 而背景色和图片的颜色非常接近, 这样给用户的体验会更好. 我们这里演示 ...

  5. git 撤销push到远程仓库的无用commit

    一 回退代码 git reset <版本号> --soft // 软回退 - 所有的commit修改都被撤销了,且修改的代码统一撤回到暂存区 git reset <版本号> - ...

  6. python坐标获取经纬度或经纬度获取坐标免费模块--geopy

    一.官方文档 https://github.com/geopy/geopy 二.模块安装 pip3 install geopy 三.简单实用 from geopy.geocoders import N ...

  7. 从零造就JVM大牛(一)

    引言 从事java的小伙伴大家好,如果你是一名从事java行业的程序员,无论你是小白还是工作多年的老司机,我相信这篇文章一定会给你带来 不同程度的收货不敢说你看完我的文章从此精通jvm打遍天下无对手, ...

  8. Eureka实现注册中心

    CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼.它是分布 ...

  9. dcoker 搭建单节点redis

    1.安装docker 1.检查内核版本,必须是3.10及以上 [root@localhost ~]# uname -r 2.安装docker [root@localhost ~]# yum insta ...

  10. Redis常用命令(4)——List

    BLPOP 格式:BLPOP key [key ...] timeout 作用:从列表左侧弹出元素,超时时间为timeout,单位为秒.如果timeout为0则一直阻塞直到列表中有元素.如果同时操作多 ...