0


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

文件的描述符和重定向

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>#defineLOG"log.text"intmain(){//w:默认为写方式打开文件,如果文件不存在,就会创建出来
  FILE* fp =fopen(LOG,"w");if(fp ==NULL){perror("fopen");return1;}//正常进行文件操作constchar* 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");}elseprintf("%s",line);fclose(fp);return0;}

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在这里插入图片描述
在这里插入图片描述

怎么理解文件缓冲区

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

标签: linux

本文转载自: https://blog.csdn.net/wh9109/article/details/132381635
版权归原作者 Fre丸子_ 所有, 如有侵权,请联系我们删除。

“【Linux】文件的描述符和重定向”的评论:

还没有评论