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

相关推荐
zmj3203242 小时前
单片机内存在C 语言编译后的 “逻辑分区”
c语言·单片机·内存分区
senijusene2 小时前
I2C 总线框架下LM75A 温度传感器 Linux驱动开发:
linux·运维·驱动开发
片酷2 小时前
【Isaacsim&Isaaclab】安装教程
linux·开发语言·python
Magic@2 小时前
Redis学习[1] ——基本概念和数据类型
linux·开发语言·数据库·c++·redis·学习
大腕先生2 小时前
通用分页超详细介绍(附带源代码解析&页面展示效果)
xml·java·linux·服务器·开发语言·前端·idea
w_com.h3 小时前
C语言中 栈、队列、双向链表
c语言·开发语言·链表
红茶要加冰3 小时前
如何安装ubuntu-24.04-live-server-amd64系统
linux·运维·ubuntu
cany10003 小时前
信号sigset_t
c语言
念恒123063 小时前
进程控制---进程等待
linux·c语言