linux 标准io随记

标准 io 篇

1. fopen 文件打开

函数原形

#include <stdio.h>

FILE *fopen(const char *path, const char *mode); 
// const char* 保护实参不被修改

参数

  • path 文件名(包含路径:绝对路径或者相对路径)

  • mode 文件打开的方式

  • r 以只读方式打开 文件必须已存在

  • r+ 以读写方式打开 文件必须已存在

  • w 以只写方式打开 如果不存在 则创建并打开 存在则清空并打开

  • w+ 以读写方式打开 如果不存在 则创建并打开 存在则清空并打开

  • a 以追加写的方式打开 如果文件不存在 则创建并打开

  • a+ 以追加读写的方式打开 如果文件不存在 则创建并打开

  • 返回值 成功返回FILE* 类型指针(文件流指针) 失败返回NULL

示例程序

#include<stdio.h>
#include<stdlib.h>//exit头文件
int main()
{
	FILE * fp=NULL;
	//只写的方式打开文件
	fp = fopen("first.txt","w");//调用
	if(NULL==fp)//#define NULL (void *)0
	{
		printf("文件打开失败\n");
		exit(-1);//退出整个程序
	}
	return 0;
}

tips

程序运行时 系统自动打开3个流

描述类型含义
stdinFILE * stdin从标准输入取数据,默认是键盘
stdoutFILE * stdout向标准输出设备输出,默认是显示器
stderrFILE * stderr向标准错误输出设备输出,默认是显示器

2. fclose 关闭文件

函数原型

#include <stdio.h>

int fclose(FILE *fp);// fclose(fp);
//功能:关闭文件 

3. perror 错误提示

函数原型

#include <stdio.h>

void perror(const char *s);
//功能:返回上一个函数的错误信息 
//参数:实际错误信息 

4. fgets 按行读取

函数原型

#include<stdio.h>
	
char *fgets(char *s, int size, FILE *stream);
//功能:从文件中读取一行 

参数

  • s: 读取的数据存放的位置

  • size: 最多读多大 实际最多能读到的有效字符 size-1个字节

  • stream: 从stream文件中读取一行

  • 返回值: 成功 返回读到的数据 ,失败或者到文件结尾 返回NULL

备注
如果size < 行字节数,实际读取有效字符size - 1,剩下的字符需要循环读取 直到 ’\n’。
如果size > 行字节数,实际读到一行。(遇到 ’\n’ 停止)


6. fputs 向文件中写入一行数据

函数原型

#include<stdio.h>

int fputs(const char *s, FILE *stream);
//功能:向文件中写入一行 

参数

  • s: 存放要写入文件的字符串
  • stream: 要写入的文件
  • 返回值: 成功:返回非负数。 失败:返回EOF //EOF是文件结束标志

示例程序

//存在文件 stu.txt (有内容),读取stu.txt内容,并将读到的内容写入note.txt

#include<stdio.h>
#include<stdlib.h>
#include<strings.h>

//./mycp first.txt  note.txt
int main(int argc,char *argv[])
{
	//argc!=3  错误处理 
	if(argc!=3)
	{
		printf("%s 源文件名 目标文件名\n",argv[0]);
		exit(-1);
	}
	char buf[100]="\0";
	char *pret = NULL;
	//1.打开源文件 fpSrc   argv[1]  "r"
	FILE *fpSrc = fopen(argv[1],"r");
	if(NULL==fpSrc)
	{
		perror("fopenSrc");
		exit(-1);
	}
	//2.打开目标文件 fpDst  argv[2] "w"
	FILE * fpDst = fopen(argv[2],"w");
	if(NULL==fpDst)
	{
		perror("fopenDst");
		exit(-1);
	}
	//循环导数据
	while(1)
	{
		pret = fgets(buf,sizeof(buf),fpSrc);
		//错误处理 
		if(NULL==pret)
		{
			break;
		}
		fputs(buf,fpDst);	
		bzero(buf,sizeof(buf));
	}
	//3.关闭两个文件
	fclose(fpSrc);
	fclose(fpDst);
}

7. bzero 地址上数据清零

函数原型

#include <strings.h>

void bzero(void *s, size_t n);
//功能:将地址s的前n个字节清零


8. fputc 写入一个字符

#include <stdio.h>

int fputc(int c, FILE *stream);
//功能:输出一个字符到文件 

参数

  • c: 要输出的字符
  • stream:文件
  • 返回值: 成功则返回写入的字符,失败返回EOF

示例程序

#include<stdio.h>
#include<stdlib.h>

int main()
{
	FILE *fp = fopen("first.txt","w");
	if(NULL==fp)
	{
		perror("fopen");
		exit(-1);
	}
	//将字符'a'写入fp
	fputc('a',fp);
	char ch='x';
	fputc(ch,fp);
	fclose(fp);
	return 0;
}

9. fgetc 读取一个字符

函数原型

#include <stdio.h>

int fgetc(FILE *stream);
//功能:从文件中读取一个字符 

参数

  • stream:文件
  • 返回值: 成功则返回读到的字符 ,失败或到文件结尾返回EOF

示例程序

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *fp = fopen("file.txt","r");//
	if(NULL==fp)
	{
		perror("fopen");
		exit(-1);
	}
	char ch;
	//从文件fp中读取一个字符 
	ch = fgetc(fp);//getchar();
	printf("%c",ch);
	while(1)
	{
		ch = fgetc(fp);//getchar();
		if(EOF==ch)
		{
			break;
		}
		printf("%c",ch);	
	}
	fclose(fp);
	return 0;
}

10. fread 按指定大小读

函数原型

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);// 10 
//功能:按指定大小读 任意类型 

参数

  • ptr:读取的数据存放的位置
  • size:每次读取的大小
  • nmemb:想读多少次
  • strem:从stream读取数据
  • 返回值:成功则返回实际读到的次数; 失败则此数字可能<nmemb或者为0,这种情况需用 feof 函数判断是否到达文件结尾

示例程序

#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *fp = fopen("file.txt","r");
	if(NULL == fp)
	{
		perror("fopen");
		exit(-1);
	}
	int i;
	char buf[5] = "\0";
	//从文件fp读取数据存入buf,每次读1个字符,读取sizeof(buf)次
	fread(buf,1,sizeof(buf),fp);
	for(i = 0;i < 5;i++)
	{
		printf("%c",buf[i]);
	}
	return 0;
}

11. fwrite 指定大小写

函数原型

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
//功能: 按指定大小写 

参数

  • ptr:要写入的数据存储的位置
  • size:每次写的大小
  • nmemb:写多少次
  • stream:写入的文件
  • 返回值:成功则返回实际写的次数,失败则返回 0

示例程序

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

int main()
{
	FILE *fp = fopen("first.txt","w");
	if(NULL = fp)
	{
		perror("fopen");
		exit(-1);
	}
	char buf[50] = "hello world";
	fwrite(buf,3,sizeof(buf),fp);
	//关闭文件
	fclose(fp);
	return 0;
}

12. feof 文件结束标识符

函数原型

#include <stdio.h>

int feof(FILE *stream);
//功能:测试文件位置指针是否到达文件结尾 

参数

  • stream:文件流指针
  • 返回值:如果到达文件结尾,则返回真,否则返回假

示例程序

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

int main()
{
	FILE *fp = fopen("test9.c","r");
	if(NULL == fp)
	{
		perror("fopen");
		exit(-1);
	}
	char buf[50] = "\0";
	//循环读取文件内容显示到屏幕
	while(1)
	{
		fread(buf,1,sizeof(buf),fp);
		printf("%s",buf);
		if(feof(fp))
		{
		break;
		}
		bzero(buf,sizeof(buf));
	}
	//关闭文件
	fclose(fp);
	return 0;
}

13. rewind 定位文件位置指针

函数原型

void rewind(FILE *stream);
 
//功能:将文件位置指针定位到文件的起始位置

参数

  • stream:定位stream文件的位置指针

示例函数

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

int main()
{
	FILE *fp = fopen("first.txt","w+");
	if(NULL == fp)
	{
		perror("fopen");
		exit(-1);
	}
	char buf[50] = "hello world";
	fwite(buf,3,sizeof(buf),fp);
	
	//将文件位置指针定位到文件起始位置
	rewind(fp);
	bzero(buf,sizeof(buf));
	fread(buf,1,sizeof(buf),fp);
	printf("read:%s\n",buf);
	
	//关闭文件
	fclose(fp);
	return 0;
}

14. fseek 定位文件位置指针

函数原型

#include <stdio.h>

int fseek(FILE *stream, long offset, int whence);
//功能:定位文件位置指针 

参数

  • stream:定位stream文件的位置指针
  • offset:偏移
  • whence:参照
  • SEEK_SET 文件起始位置 fseek(fp,2,SEEK_SET);//相对文件起始位置,向右偏移2个字节
  • SEEK_END 文件的末尾 fseek(fp,-2,SEEK_END);//相对文件末尾,向左偏移2个字节
  • SEEK_CUR 当前位置 fseek(fp,3,SEEK_CUR);//相对当前位置,向右偏移3个字节
  • 返回值:成功则返回0,失败则返回-1

15. ftell 返回当前文件位置指针的位置

函数原型

#include<stdio.h>

long ftell(FILE *stream);
//功能:返回当前文件位置指针的位置(测试当前文件位置指针相对文件开头距离)  

示例

long n = ftell(fp);
printf("%ld\n",n);
return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值