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

相关推荐
ouynagda几秒前
Linux 进程与线程学习笔记
linux·笔记·学习
聚搜云——JuSouClouD7 分钟前
重庆华为云代理商:GPU加速云服务器和普通ECS有什么区别?AI、渲染和计算场景怎么选
服务器·人工智能·华为云
渡我白衣1 小时前
深入理解 Transformer:Transformer 究竟是什么?
java·linux·开发语言·c++·人工智能·深度学习·transformer
xu_wenming8 小时前
嵌入式软件架构中的6种解耦艺术
c语言·驱动开发·嵌入式硬件·架构
光电的一只菜鸡8 小时前
ubuntu之坑(二十)——VMware虚拟机系统无法正常进入如何处理
linux·运维·ubuntu
你住过的屋檐10 小时前
【Nginx】linux上安装nginx
linux·运维·nginx
宵时待雨10 小时前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
大模型码小白11 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
晓晓_za89866812 小时前
开源 GEO 优化源码二次开发:贴牌改造与业务模块扩展实践
java·运维·服务器·开发语言·性能优化·开源
SCandL15212 小时前
k8s service
linux·容器·kubernetes