I/O分为标准I/O和文件I/O。
文件可分类为:b(block 块设备)c(char 字符设备)d(direct 目录)—(regular 常规文件)l(链接)s(socket 套接口)p(pipe 有名管道)
标准I/O:
依赖C库,采用文件指针FILE *fp(流) ,开辟缓冲区,一次多读,下次访问快(高级磁盘IO)。
标准I/O预定义了3个流,stdin(0【文件描述符】 标准输入),stdout(1 标准输出),stderr(2 标准错误输出)
FILE *fopen(const char *path,const char *mode);
每次一个字符的I/O:int getc/putc(FILE *stream);
int fgetc/fputc(FILE *stream);
每次一行的I/O:char *gets/puts(char *s)(会出现缓存越界问题);
char *fgets/fputs(char *s,int size,FILE *steam);
直接I/O:size_t fread(void *ptr,size_t size_t nmemb,FILE *stream); stream读入ptr指向位置
size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
检查文件出错函数;int feof/ferror(FILE *stream);
定位:int fseek(FILE *stream,long offset,int whence); whence:SEEK_SET(开头)/SEEK_CUR(当前)/SEEK_END(结尾)
int fclose(FILE *stream);
文件I/O:
依赖系统,采用文件描述符(整型)fd,不带缓冲(低级磁盘IO)。
int open(const char *pathname,int flags【打开方式】,mode_t mode【权限】); 返回文件描述符
int creat(const char *pathname,mode_t mode);
int close(int fildes);
ssize_t read(int fd,void *buf,size_t count);
ssize_t write(int fd,void *buf,size_t count);
off_t lseek(int fildes,off_t offset,int whence);