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 的缓冲模式不是系统默认全缓冲,而是:输出到终端 → 行缓冲,输出到文件/管道 → 全缓冲。

相关推荐
Dovis(誓平步青云)17 小时前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络
专注_每天进步一点点17 小时前
SLB(绑定弹性公网ip)-gateway-业务pod,gateway上出现reset by peer,业务pod上没有reset by peer
服务器·tcp/ip·gateway
Java小白笔记17 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
openKylin18 小时前
与全球技术演进同频,openKylin 3.0从C迈向Rust
c语言·开发语言·rust·开源·开放原子·openkylin
ACP广源盛1392462567318 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
迷茫、Peanut19 小时前
C语言sizeof和strlen
c语言
qetfw19 小时前
CentOS 7 搭建 LDAP 目录服务
linux·运维·centos
ALINX技术博客20 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统进阶-PS DMA
linux·fpga开发
IT方大同20 小时前
linux简介
linux·运维·服务器
Dear~yxy21 小时前
时间同步服务器搭建
运维·服务器