【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:了解在Linux下的系统文件IO,知道什么是文件描述符,什么是重定向

> 毒鸡汤:白日莫闲过,青春不再来。

> 专栏选自:Linux初阶

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

🌟前言

最早我们在C语言中学习关于如何用代码来管理文件,比如文件的输入和文件的输出,一些文件的接口,掌握上述的知识只能说是对文件入门而已,在Linux中我们是一切接文件的,如何深入学习文件的知识这是一个难题,今天我们所探讨就是Linux的基础I/O。

⭐主体

学习【Linux】基础IO咱们按照下面的图解:

🌙 回顾C文件接口

💫 C 读写文件

文件操作:

  • 首先要打开文件:打开成功,返回文件指针;打开失败,返回NULL
  • 最后要关闭文件

代码操作:

FILE *fopen(const char *path, const char *mode);
int fclose(FILE *fp);
1.C 写文件

采用方法:

我们可以fputs/fgets以字符串形式读写;也可以fprintf/fscanf格式化读写

代码操作:

int fputs(const char *s, FILE *stream);  向特定文件流写入字符串
int fprintf(FILE *stream, const char *format, ...);

举个栗子:

①如果以"w"模式打开文件,默认是文本读写,且会把原始内容清掉再写。

代码如下:

#include <stdio.h>

int main()
{
	FILE *fp = fopen("log.txt","w");
	if(fp == NULL)
	{
		perror("fopen");
		return 1;
	}
	// 进行文件操作
	
	fclose(fp);
	return 0;	
}

运行结果:

②如果要以追加方式写,则要以"a" append模式打开文件

代码如下:

#include <stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
	FILE *fp = fopen("log.txt","a"); // 追加
	if(fp == NULL)
	{
		perror("fopen");
		return 1;
	}
	// 进行文件操作
	const char* s = "hello world\n";
	fwrite(s,strlen(s),1,fp);
	return 0;	
}

运行结果:

2.C 读文件

解读:

fgets从特定文件流中按行读取,内容放在缓冲区。读取成功返回字符串起始地址,读失败返回NULL.

代码演示:

char *fgets(char *s, int size, FILE *stream); //size:为缓冲区大小
int fscanf(FILE *stream, const char *format, ...);

举个栗子:

#include <stdio.h>
#include <unistd.h>
#include <string.h>


int main()
{
	FILE *fp = fopen("./log.txt","r");
	if(fp == NULL)
	{
		perror("fopen");
		return 1;
	}

	// 进行文件操作
	char buffer[64];
	while(fgets(buffer,sizeof(buffer),fp))
	{
		printf("%s",buffer);//把我们读到的东西打出来
	}
	
	return 0;	
}

运行结果:

💫 关于stdin stdout stderr

概念分析:

C语言默认会打开三个输入输出流:stdin、stdout、stderr,它们的类型都是FILE*,C语言把它们当做文件

评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值