标准io:
文件流:文件打开的标志,是结构体类型的指针,FILE *。
打开:FILE *fopen(const char *pathname, const char *mode);
成功返回FILE *型的指针, 失败返回NULL;
读取:
int fgetc(FILE *fp);
返回读取的字符。
char *fgets(char *s, int size, FILE *fp);
成功返回字符串,失败返回NULL。
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
成功返回读到的字符个数,包括换行符,不包括'\0'。
size_t fread(void *buf, size_t size, size_t nmemb, FILE *fp);
成功返回读到的字符个数。失败返回-1;读到最后EOF返回0。
写:
int fputc(int c, FILE *fp);
成功返回读到的字符,失败返回-1。
int putc(int c, FILE *fp);
成功返回读到的字符,失败返回-1。
int fwrite(void *buf, size_t size, size_t nmemb, FILE *stream);
成功返回写入的字符个数,失败返回-1,读到最后EOF返回0。
定位:
int fseek(FILE *fp, long offset, int whence);
成功返回偏移的字节数。失败返回-1.
void rewind(FILE *fp);
相当于fseek(FILE *fp, 0L, SEEK_SET);
long ftell(FILE *fp);
成功返回文件偏移量,失败返回-1.
系统io:
文件描述符:fd,非负整型数,是文件io打开文件的标志,使用规则当前可用最小的作为新打开的文件描述符。
打开:
int open(const char *pathname, int flags, mode_t mode);
成功返回文件描述符, 失败返回-1。
读:
size_t read(int fd, char *buf, size_t count);
成功返回读到的字符个数,失败返回-1。
写:
size_t write(int fd, const char *buf, size_t count);
成功返回写入的字符个数,失败返回-1。
文件偏移量:
off_t lseek(int fd, off_t offset, int whence);
成功返回文件偏移量, 失败返回-1。
关闭:
int close(int fd);
成功返回0,失败返回-1。
内核为打开的文件维护三张表:
进程表(包含文件描述符,指向文件表的指针),
文件表(pos代表偏移量,文件的打开方式,指向i_node结点表的指针)
i_node结点表(文件大小,文件权限,内核io操作函数的地址)。
errno是一个全局整形变量,默认为0,代表成功,errno会存储最近的一次错误,下一次的错误会覆盖上一次的错误。存储在errno.h中
errno > 0代表出错了,errno = 0代表没有错误。
几乎所有的系统调用和库函数都会设置errno, 看手册查找是否设置了errno。
void perror(const char *s);直接打印错误原因。
输出形式:const char *s:strerror(errno)
char *strerror(int errnum); (errnum就是errno)
fptintf(stderr, "出错了:",stderror(errno));