Linux标准IO相关库函数和‘‘流‘‘

fopen()/fclose() ---->打开/关闭文件

fgetc()/fputc() ---->按字节读写文件

fgets()/fputs() ---->按行读写文件

fread()/fwrite() ---->按对象读写文件

ftell()/fseek()/rewind()/ ---->定位文件

fflush() ---->刷新流(强制刷新缓冲区)

feof() ---->判断错误流

相关手册的查找:

man手册:

man 1:shell指令和可执行程序

man2:系统调用函数

man3:标准库函数

1.fopen()

#include <stdio.h>
FILE *fopen(const char *pathname,const char *mode);
参数:
    pathname:打开文件的文件名(包含路径)
    mode:打开文件的方式
    	r:以只读的方式打开文件,文件必须要存在
        r+:以读写方式打开,文件必须要存在
        w:以只写方式打开文件,如果文件不存在,则会创建再打开
		w+:以读写方式打开文件,如果文件不存在,则会创建再打开
        a:以只写方式打开文件,如果文件不存在,则会创建再打开
        a+:以读写方式打开文件,如果文件不存在,则会创建再打开
    返回值:
    成功返回对应的文件的流1指针,失败返回NULL,并设置错误号(errno)
    errno:当前系统中最后一个错误的编号
---------------------------------------------------------
     #include <string.h>
			char *strerror(int errnum);
			参数:
                errnum:错误号
			返回值:
                成功返回错误原因
--------------------------------------------------------          
       #include <stdio.h>

       void perror(const char *s);
		参数:
            s:提示信息
		

eg:

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

int main(int argc, char *argv[])
{ 
    FILE *fp = fopen("1.txt","r");
    if(NULL == fp)
    {
        //printf("errno=%d :%s\n",errno,strerror(errno));
        perror("open 1.txt");
        return -1;
    }
    printf("stdin_num:%d\n",stdin->_fileno);//标准输入流 ---->stdin ----->键盘
    printf("stdout_num:%d\n",stdout->_fileno);//标准输出流 ---->stdout ----->终端
    printf("stderr_num:%d\n",stderr->_fileno);//标准错误流 ---->stderr
    printf("file_num:%d\n",fp->_fileno);//本文件流
    printf("size=%ld\n",stdout->_IO_buf_end-stdout->_IO_buf_base);//末尾buf-起始buf-->空间的总字节
    printf("open successfully\n");
    fclose(fp);
    return 0;
} 

终端演示:
在这里插入图片描述
2、fclose()

#include <stdio.h>

int fclose(FILE *stream);
参数:
    stream:关闭文件对应的流指针
返回值
    成功返回0;失败返回EOF(宏定义了-1)

3、按字节读写—fgetc/fputc


```bash
#include <stdio.h>
int fgetc(FILE *stream);
	参数:stream-->流指针
    返回值:
        成功返回读取的字符,失败返回-1;
        读到文件末尾也会返回-1;
-------------------------------------------------------------------------------------------
#include <stdio.h>

       int fputc(int c, FILE *stream);
	参数:
        stream-->流指针
    返回值:
        成功返回写入的字符,失败返回-1;

eg:

#include <stdio.h>

int main(int argc, char *argv[])
{ 
    FILE *fp = fopen("1.txt","r+");
    if(NULL==fp)
    {
        perror("open 1.txt");
        return -1;
    }
    char ch=fgetc(fp);
    printf("ch=%c\n",ch);
    return 0;
} 
---------------------------------------------------------------------------------------
#include <stdio.h>

int main(int argc, char *argv[])
{ 
    FILE *fp = fopen("2.txt","w+");
    if(NULL==fp)
    {
        perror("fopen");
        return -1;
    }
    char ch = fgetc(stdin);
    int ret = fputc(ch,fp);
    if(ret<0)
    {
        perror("fputc");
        return -1;
    }
    return 0;
} 


```bash
4、按行读写---fgets()/fputs()

#include <stdio.h>
       char *fgets(char *s, int size, FILE *stream);
	参数:
        s:字符串首地址
        size:字符串读取的最大长度
        stream:流指针
    返回值:成功返回字符串的首地址,失败返回NULL;
            
    注:
      1.当读取内容遇到换行符,读取内容结束
      2.\n换行符也会一起读进去存起来      
      3.最大读取内容为size-1个      
-----------------------------------------------------------------------------------
int fputs(const char *s, FILE *stream);
	参数:
        s:写入字符串的首地址
		stream:流指针
	返回值:失败返回-1
#include <stdio.h>

int main(int argc, char *argv[])
{ 
    FILE *fp=fopen("1.txt","r+");
    if(NULL==fp)
    {
        perror("fopen");
        return -1;
    }
    char buf[64]={0};
    fgets(buf,64,stdin);
    printf("%s\n",buf);
    return 0;
} 
#include <stdio.h>

int main(int argc, char *argv[])
{ 
    FILE *fp=fopen("1.txt","a+");
    if(NULL==fp)
    {
        perror("open");
        return -1;
    }
    char buf[64]={0};
    fgets(buf,64,stdin);
    int ret=fputs(buf,fp);
    if(ret<0)
    {
        printf("fputs");
        return -1;
    }
    return 0;
} 

fgets代码终端显示:
输入:
在这里插入图片描述
fputs代码终端显示:
在这里插入图片描述
1.txt:
在这里插入图片描述
运行程序后的1.txt:
在这里插入图片描述

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值