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;
}




发布了101 篇原创文章 · 获赞 26 · 访问量 46万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览