APUE学习笔记——标准I/O库

1、标准输入、输出、错误

在#include <unistd.h>头文件下有三个文件描述符STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO

本章也有三个文件指针,在#include<stdio.h>头文件中,分别是stdin,stdout,stderr。

2、格式化I/O函数

2.1 格式化输入

#include <stdio.h>
int scanf(const char *format, ...);//
int fscanf(FILE *fp, const char *format, ...);  //从文件中读取,如果fp=stdin,那就是从屏幕输入
int sscanf(const char *buf, const char *format, ...);  //可以提取字符串内容,遇到空格停止(注意)
#include <stdarg.h>
int vscanf(const char *format, va_list arg);
int vsscanf(const char *buf, const char *format, va_list arg);
int vfscanf(FILE *fp, const char *format, va_list arg);
2.2 格式化输出

#include <stdio.h>
int printf(const char *format, ...);//
int fprintf(FILE *fp, const char *format, ...);  //写入到文件,若fp=stdout,输出到屏幕
int sprintf(char *buf, const char *format, ...);  //格式化字符串,可以将其他类型转换为字符串
int snprintf(char *buf, size_t n, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list arg);
int vfprintf(FILE *fp, const char *format, va_list arg);
int vsprintf(char *buf, const char *format, va_list arg);
int vsnprintf(char *buf, size_t n, const char *format, va_list arg);

3、缓冲

#include <stdio.h>
void setbuf(FILE *fp, char *buf);//此函数用来打开或关闭缓冲机制,开启缓冲:buf参数必须指向一个长度为BUFSIZ的缓冲区(常量,在<stdio.h>中),开启为全缓冲或行缓冲;关闭缓冲只要将buf设置为NULL
int setvbuf(FILE *fp, char *buf, int mode, size_t size);//此函数用来设置缓冲的,mode参数如下:   
_IONBF:不带缓冲 _IOLBF:行缓冲  _IOFBF:全缓冲

4、文件操作函数

FILE *fopen(const char *filepath, const char *mode);  //打开一个指定的文件
FILE *fdopen(int fd, const char *mode);  //获取一个现有的文件描述符,使得一个I/O流与该描述符先结合,常用于由创建管道和网络通信通道函数返回的描述符。
FILE *freopen(const char *filepath, const char *mode, FILE *fp);//在一个指定的流上打开一个指定的文件,
此函数一般用于将一个指定文件打开为一个预订的流:标准输入、输出或出错
int fclose(FILE* fp);//关闭文件


5、读写流

一次读取一个字符
int fgetc(FILE *fp);
int getc(FILE *fp);
int getchar(void);
 
一次读取一行
char *fgets(char *buf, int size, FILE *fp);
char *gets(char *buf);//此函数不安全

一次写一个字符
int fputc(int c, FILE *fp);
int putc(int c, FILE *fp);
int putchar(int c);
 
一次写入一行
int fputs(const char *buf, FILE *fp);
int puts(const char *buf);
 
针对二进制I/O,一般是结构体类型
size_t fread(void *ptr, size_t size, size_t nobj,FILE *" fp );
size_t fwrite(const void *ptr, size_t size, size_t nobj,FILE *fp);

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <error.h>
#include <wchar.h>

int main(){
    char *filename = "./5_1_testfile.file";
    char buf[1024];
    char line[128];
    memset(line,0,sizeof(line));
    FILE *fp = fopen(filename,"w+");
    if(fp == NULL) {
        perror("fopen file error");
	return 1;
    }
    int wide;
    //wide = fwide(fp,-1);//设置为单字节流
    wide = fwide(fp,2);//设置为多字节流
    fprintf(stdout,"fwide: %d\n",wide);
    setvbuf(fp,buf,_IOLBF,1024);//设置为行缓冲
    puts("");
    fgets(line,127,stdin);
    //gets(line);
    fputs(line,fp);
    fclose(fp);

    fp = fopen(filename,"r+");
    fprintf(stdout,"read from %s\n",filename);
    fgets(line,127,fp);
    fprintf(stdout,"%s\n",line);
    fclose(fp);
    return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值