基于文件描述符的I/O操作
文件的打开和关闭
1.open函数
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open(const char* pathname , int flags);
int open(const char* pathname , int flags , mode_t mode);
int create(const char* pathname , mode_t mode);
成功返回文件描述符,否则返回-1,并设置errno。
flags:
文件打开方式的宏定义 含义 O_RDONLY 以只读方式打开文件 O_WRONLY 以只写方式打开文件 O_RDWR 以读写方式打开文件 O_CREAT 若所打开文件不存在,则创建该文件 O_EXCL 如果打开文件时设置了O_CREAT,但是该文件存在,则导致调用失败 O_NOCTTY 如果打开tty时,进程没有控制tty,则不控制终端 O_TRUNC 如果以只写或只读方式打开一个已存在的文件时,将该文件截至0 O_APPEND 以追加的方式打开文件 O_NONBLOCK 用于非堵塞套接口I/O,若操作不能无延迟地完成,则在操作前返回 O_NODELAY 用于非堵塞套接口I/O,若操作不能无延迟地完成 O_SYNC 当数据被写入外存或者其他设备之后,操作才返回
2.close()函数
#include<unistd.h>
int close(int fd);
文件的读写
1.read()函数
#include<unistd.h>
ssize_t read(int fd , void* buf , size_t count);
2.write()函数
#include<unistd.h>
ssize_t write(int fd , const void* buf , size_t count);
文件的定位
#include<sys/types.h>
#include<unistd.h>
off_t lseek(int fildes , off_t offset , int whence);
基于数据流的I/O操作
文件的打开和关闭
1.fopen()函数
#include<stdio.h>
FILE* fopen(const char* path , const char* mode);
2.fclose()函数
#include<stdio.h>
int fclose(FILE* fp);
字符输入/输出
1.fgetc()函数
#include<stdio.h>
int fgetc(FILE* stream);
直接用char类型来接收
2.fputc()函数
#include<stdio.h>
int fputc(int c , FILE* stream);
直接用char类型发送
字符串输入/输出
1.fgets()函数
#include<stdio.h>
char* fgets(char* s , int size , FILE* stream);
2.fputs()函数
#include<stdio.h>
int fputs(const char* s , FILE* stream);
数据块输入/输出
#include<stdio.h>
size_t fread(void* ptr , size_t size , size_t nmemb , FILE* stream);
size_t fwrite(const void* ptr , size_t size , size_t nmemb , FILE* stream);
处理数组时用到
格式化输入/输出
1.格式化输出函数
#include<stdio.h>
int printf(const char* fomat , ...);
int fprintf(FILE* stream , const char* format , ...);
int sprintf(char* str , const char* format , ...);
int snprintf(char* str , size_t size . const char *format , ...);
2.格式化输入函数
#include<stdio.h>
int scanf(const char* format , ...);
int fscanf(FILE* stream , const char* format , ...);
int sscanf(const char* str , const char* format , ...);
操作读写位置的函数
#include<stdio.h>
int fseek(FILE* stream , long offset , int whence);
long ftell(FILE* stream);
void rewind(FILE* stream);
1.fseek()函数
offset不加L就是字节
2.ftell()函数
3.rewind()函数
C标准库的I/O缓冲区
1.设置缓冲区属性
#include<stdio.h>
void setbuf(FILE* stream , char* buf);
void setbuffer(FILE* stream , char* buf , size_t size);
void setlinebuf(FILE* stream);
int setvbuf(FILE* stream , char* buf , int mode , size_t size);
对于setbuf第二个参数来说:
就是要指定一个char buf[BUFSIZ]给setbuf
2.清空缓冲区
#include<stdio.h>
int fflush(FILE* stream);