【Linux】文件的描述符和重定向

文件的描述符和重定向

      • C语言的文件读写操作
        • 代码
      • open系统打开文件方法
      • 系统读写文件操作
      • 文件描述符
      • 文件重定向
      • 怎么理解文件缓冲区

C语言的文件读写操作

文件写入
fputs
int fputs(const char *s, FILE *stream);
s:要写入的字符串
stream:要写入对应的目标文件

文件输出(只可以在文件读的环境下运行 r)
fgets
char *fgets(char *s, int size, FILE *stream);
s:要保存到的目标位置
size:输出多少字节
stream:输出的目标文件

文件写入
**fprintf
int fprintf(FILE *stream, const char *format, …);
stream:写入的目标文件
format:要写入的字符串
…:代表可以写入多组

snprintf(将字符串写入数组,不是文件写入)**
int snprintf(char *str, size_t size, const char *format, …);
str:需要存入目标数组
size:存取多大
format:对应的字符串目标

二进制文件的输出输入
fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

文件写入
fscanf函数会从文件输入流中读入数据,存储到format中,遇到空格和换行时结束。
fscanf
int fscanf(FILE *stream, const char *format, …);
stream:写入对应目标文件
在这里插入图片描述

在这里插入图片描述

代码

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#define LOG "log.text"
int main()
{//w:默认为写方式打开文件,如果文件不存在,就会创建出来FILE* fp = fopen(LOG,"w");if(fp == NULL){perror("fopen");return 1;}//正常进行文件操作const char* msg = "hello new file";int cnt  = 1;char buffer[256];while(cnt){//C语言文件写操作//snprintf(buffer,sizeof(buffer),"%s:%d:wh\n",msg,cnt);//printf("%s",buffer);//fprintf(fp,"%s : %d : wh\n",msg,cnt);//fprintf(stdout,"%s : %d : wh",msg,cnt); //fprintf(stdout,msg,NULL);//Linux一切皆文件,stdout也对应一个文件,显示器文件 fputs(msg,fp);--cnt;}char line[128];//只可以在读的环境下读取   rif(fgets(line,sizeof(line),fp) == NULL){perror("fgets");}else printf("%s",line);fclose(fp);return 0;
}

open系统打开文件方法

open
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
pathname:要创建的文件名
flags:它的操作类型

  • O_RDONLY: 只读打开
  • O_WRONLY: 只写打开
  • O_RDWR : 读,写打开
  •  这三个常量,必须指定一个且只能指定一个
    
  • O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限
  • O_APPEND: 追加写
    在这里插入图片描述
  • O_TRUNC:清空文件所有内容
    在这里插入图片描述

mode:给文件设置权限

系统读写文件操作

文件写入
write
#include <unistd.h>
ssize_t write(int fildes, const void *buf, size_t nbyte);
write返回写入多少个字节包括\0在这里插入图片描述

文件读出
read
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
在这里插入图片描述

close
#include <unistd.h>
int close(int fildes);

文件描述符

但用open打开或者创建一个文件的时候,系统会给我们返回一个整数,当返回 -1 时,说明创建文件失败,反之创建成功,当创建成功时,也会给我们返回一个整数值,这个值我们称之为文件描述符
我们修改文件时,都会用到操作符。

那么文件描述符是什么呢?
文件描述符是一个数组下标,代表的意义不同。
Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入>0, 标准输出1, 标准错误2
0,1,2对应的物理设备一般是:键盘,显示器,显示器
所以当我们在新建文件后,每个文件对应的描述符都是3,这是因为前三个都被占用了
在这里插入图片描述

文件存储规则。
当标准输入、输出、错误都占用时,文件会顺的数组顺序进行保存,如果前0、1、2出现文件关闭时。那么当文件保存的时候就会优先前面空余的部分。
在这里插入图片描述

文件重定向

如果不想占用前三个,我们可以手动更改标准输入、输出、错误的路径,也可以通过函数dup2来更改。
linux重定向常见方式有:1、标准输入输出重定向,使用 ‘>’ 或 ‘>>’ 符号实现;2、标准错误重定向,使用 ‘2>’ 符号来实现;3、输入流重定向,使用 ‘<’ 符号实现;4、管道重定向,使用 ‘|’ 符号实现。
在这里插入图片描述

手动更改
在这里插入图片描述

在这里插入图片描述

dup2()函数修改

int dup2(int oldfd, int newfd);
oldfd覆盖nwefd在这里插入图片描述
在这里插入图片描述

怎么理解文件缓冲区

显示器采用的刷新策略为行缓冲
文件采用的缓冲策略为全缓冲
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP最大连接数问题总结

最大TCP连接数量限制有&#xff1a;可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源&#xff0c;如图所示&#xff1a; 1、可用端口号限制 Q&#xff1a;一台主机可以有多少端口号&#xff1f;端口号与TCP连接&#xff1f;是否能修改&#x…

echarts 之 科技感进度条

1.图片展示 2.代码实现 /* ng qty 进度条 */ <template><div class"ngqty-progress"><div class"ngqty-info"><span>X4</span><span>50%</span></div><div :id"barNgQtyProgress index" c…

Java进阶(7)——手动实现LinkedList 内部node类的实现 增删改查的实现 toString方法 源码的初步理解

目录 引出从ArrayList到Linkedlist手动实现ArrayList从ArrayList到LinkedList 总体设计Node类Node的方法&#xff1a;根据index找node 增删改查的实现增加元素删除元素修改元素查询元素 toString方法完整代码List接口类LinkedList的实现测试类 总结 引出 1.linkedList的节点&am…

基于JJWT理解JWT,JWS,JWE

JWT &#xff0c; 全写JSON Web Token, 是开放的行业标准RFC7591&#xff0c;用来实现端到端安全验证. 从开发者理解的角度来说&#xff1a; JWT 是一个定义传递信息的标准JWT 的Token是一个Base64编码的字符串&#xff0c; 类似 eyJhbGciOiJIUzI1NyJ9.eyJzdWIiOiJvc2NhciJ9.…

房屋结构健康监测,科技助力让建筑更安全

房屋建筑是人们赖以生存的场所&#xff0c;然而当前我国许多房屋已经达到了使用寿命的中期&#xff0c;房屋的安全系数逐年降低&#xff0c;风险也随着时间的推移而累积。长期以来&#xff0c;我国的房屋普遍存在寿命短、隐患多的问题&#xff0c;“重建设&#xff0c;轻管理”…

探索PDF校对:为何这是现代数字文档的关键步骤

在今日的数字化浪潮中&#xff0c;文档的创建与分享从未如此频繁。尤其是PDF&#xff0c;作为一个普遍接受的标准文件格式&#xff0c;其在企业、学术和日常生活中的应用已经无处不在。但随之而来的挑战是如何确保文档的准确性和专业性。让我们深入探索PDF校对的重要性以及它为…

element-ui中的el-table的summary-method(合计)的使用

场景图片&#xff1a; 图片1&#xff1a; 图片2&#xff1a; 一&#xff1a;使用element中的方法 优点&#xff1a; 直接使用summary-method方法&#xff0c;直接&#xff0c;方便 缺点&#xff1a; 只是在表格下面添加了一行&#xff0c;如果想有多行就不行了 1&#xff1a;h…

一、MQ的基本概念

1、初识MQ MQ全称是Message Queue&#xff0c;消息队列&#xff0c;多用于系统之间进行异步通信。队列的概念数据结构中有详细介绍过&#xff0c;先进先出&#xff0c;消息队列就是存储消息的数据结构。 同步调用和异步调用两者之间的区别&#xff1a; 同步调用&#xff1a;发…

opencv-dnn

# utils_words.txt 标签文件 import osimage_types (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")def list_images(basePath, containsNone):# return the set of files that are validreturn list_file…

gdb 条件断点

条件断点&#xff0c;顾名思义就是有条件才会触发的断点&#xff0c;一般设置此类断点形如&#xff1a;b xxx if xxx&#xff0c;如&#xff1a; 要触发此断点则需要 is_created 0。打完断点我们也可以用 info b 查看一下当前已经设置的断点信息&#xff0c;如&#xff1a; 断…

探索未知世界:桌面端3D GIS引领地理信息新时代

近年来&#xff0c;桌面端的三维地理信息系统&#xff08;3D GIS&#xff09;在地理信息领域迎来了显著的发展&#xff0c;为我们带来了更深入、更丰富的地理空间认知和数据分析体验。从城市规划到环境保护&#xff0c;从资源管理到应急响应&#xff0c;桌面端的3D GIS正逐渐成…

Java程序设计——在一个给定的字符串中查找并解析姓名、出生日期、个人网站、身高和体重信息,并输出相应的结果

package ch4;public class FindMess {public static void main(String[] args) {String mess "姓名:张三 出生时间:1989.10.16。个人网站:http://www.zhang.com。身高:185 cm,体重:72 kg";int index (int)(mess.indexOf(":")); //mess调用indexOf(Stri…

git Update failed cannot lock ref

报错详情 解决方案 百度了很多方案&#xff0c;过滤出了有效方案 去该项目下的.git文件里找到报错文件&#xff0c;本例中即为&#xff1a;.git/refs/tags/pre-RELEASE-PRE-20230817-03 删除该文件&#xff0c;重新pull&#xff0c;pull成功问题解决

Java并发工具类

JDK并发包中常用并发工具类&#xff1a; CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段&#xff1b; Exchanger工具类则提供了在线程间交换数据的一种手段。 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成…

Electron学习3 使用serialport操作串口

Electron学习3 使用serialport操作串口 一、准备工作二、 SerialPort 介绍1. 核心软件包(1) serialport(2) serialport/stream(3) serialport/bindings-cpp(4) serialport/binding-mock(5) serialport/bindings-interface 2. 解析器包3. 命令行工具 三、创建一个demo程序1. 创建…

Dapper

介绍 dapper是一款轻量级的ORM Dapper 被称为 ORM 之王。 以下是 Dapper 的主要功能&#xff1a; 速度快&#xff0c;性能快。 更少的代码行。 对象映射器。 静态对象绑定。 动态对象绑定。 轻松处理 SQL 查询。 易于处理存储过程。 直接对 IDBConnection 类进行操作&#xf…

重注微电子产业,“三大齿轮”能否带起香港经济的“第三轮”

文 | 智能相对论 作者 | 佘凯文 众所周知&#xff0c;微电子产业早已成为现代科技领域的关键钥匙&#xff0c;谁能掌握微电子产业&#xff0c;谁就能拥有全球科技领域的话语权。 从上世纪开始&#xff0c;微电子产业曾经历过几次重大转移&#xff0c;如70年代从美国转向日本…

零拷贝技术详解

当涉及到网络编程和IO操作时&#xff0c;数据拷贝是一个常见的性能瓶颈。传统的数据拷贝过程中&#xff0c;数据需要从内核缓冲区复制到用户空间缓冲区&#xff0c;然后再从用户空间缓冲区复制到内核缓冲区&#xff0c;这个过程会耗费大量的CPU时间和内存带宽&#xff0c;降低系…

tensorRT安装

官方指导文档&#xff1a;Installation Guide :: NVIDIA Deep Learning TensorRT Documentation 适配很重要&#xff01;&#xff01;&#xff01;&#xff01; 需要cuda, cuDNN, tensorRT三者匹配。我的cuda11.3 所以对应的cuDNN和tensorRT下载的是如下版本&#xff1a; cud…

【业务功能篇77】微服务-OSS对象存储-上传下载图片

3. 图片管理 文件存储的几种方式 单体架构可以直接把图片存储在服务器中 但是在分布式环境下面直接存储在WEB服务器中的方式就不可取了&#xff0c;这时我们需要搭建独立的文件存储服务器。 3.1 开通阿里云服务 针对本系统中的相关的文件&#xff0c;图片&#xff0c;文本等…