Linux04(重定向)

#技术笔记

1.程序在开启的时候,系统就会直接打开三个文件描述符,分别是0,1,2,对应三个文件流 stdin,stdout, stdeff。

  1. 使用 fopen 的时候,打开一个文件,有用到缓冲区(默认全缓冲), 底层是使用到了文件描述符的;提供一个系统调用 fileno() 这个可以把FILE * 转换成文件描述符。

  2. printf() 只往文件描述符 1 的那去。由于文件描述符是从小到大分配,关了1又分配给了后面打开的了。代码如下:

    int main(int argc, char *argv[])
    {
    printf("11111\n");
    close(1);

    复制代码
     int fd = open("1.txt", O_WRONLY | O_CREAT|O_TRUNC, 0666);
    
     printf("fd = %d\n", fd);
     write(fd, "66666\n", 6);
     
     close(fd);
    
     return 0;

    }

运行结果:

4.dup() 和 dup2()

dup 函数的功能是创建一个新的文件描述符(系统自动选最小可用),然后指向与参数里面相同的文件对象;dup2 函数分 个参数,第一个是旧的文件描述符,可以用来指向旧的对象,第二个参数是指定拿一个你想要的文件描述符0,1,2都可以,后续在屏幕和文件"反复横跳" 都可以使用这2个函数和 文件描述符1 进行操作一下就行。(注意它们虽然都返回int,但不要用整形去赋值)

5.进行重定向的时候一定先 printf("\n"); 一把 \n换行是关键!printf 的缓冲模式不是系统默认全缓冲,而是:输出到终端 → 行缓冲,输出到文件/管道 → 全缓冲。

相关推荐
.小小陈.23 分钟前
Linux 多线程进阶:线程互斥、同步、线程池、死锁与线程安全、读写锁、自旋锁
linux·开发语言·c++
Hello_wshuo42 分钟前
v3s镜像从零开始构建
linux·嵌入式
Felven1 小时前
国产ZYNQ multiboot功能介绍与实现
linux·fpga开发·multiboot·国产zynq
脆皮炸鸡7551 小时前
进程通信----命名管道
linux·经验分享·笔记·算法·学习方法
Mapleay1 小时前
FE-BE 动态路机制之 DPCM 与 DAPM 协作
linux
三品吉他手会点灯2 小时前
C语言学习笔记 - 32.嵌入式C语言学习阶段对初学编程者的建议
c语言·开发语言·笔记·学习
闲适达人2 小时前
nginx传递url的获取方案
java·服务器·前端
IT大白鼠2 小时前
Linux故障分析与排查:系统日志、启动故障与文件系统修复
linux·运维·服务器
老詹图解IT2 小时前
统信 UOS 登录界面转圈闪退/卡登录等常见原因及处理
linux·服务器·网络
闫记康2 小时前
Linux学习笔记day1
linux·笔记·学习