首页 > 其他 > 详细

高级编程 ---IO总结

时间:2021-03-17 22:36:30      阅读:22      评论:0      收藏:0      [点我收藏+]

系统io(文件io)

文件描述符:已打开文件的标志,非负整型数,当前可用最小作为新文件的文件描述符,默认范围0-1024
文件的打开:
int open(const char *path, int flag, int mode);
path:要打开文件的路径
flag:打开方式
O_RDONLY / O_WRONLY / O_RDWR 三选一
O_CREAT / O_TRUNC / O_APPEND
mode: mode&~umask创建文件的权限
返回值:成功--》文件描述符 -1 set errno
读:
ssize_t read(int fd, void *buf, int size);
fd:带读取的文件的文件描述符
buf:存储读取到的数据
size:buf大小
返回值:成功返回读到字节个数 -1失败 0结束

int write(int fd, const void *buf, int size);
fd:要写入的文件
buf:存储待写入的数据
size:待写入的字节个数
返回值: 成功返回写入的字节个数,失败-1
设置文件偏移量
int lseek(int fd, offset_t n, int whence);
whence: SEEK_SET开头 SEEK_CUR当前 SEEK_END末尾
返回值当前文件的偏移量
关闭
int close(int fd)
文件共享
进程表项:每一个进程
文件表:每打开
v结点表
文件描述符的复制--》重定向
int dup(int oldfd);
int dup2(int oldfd, int newfd);
./a.out > outfile 2>&1
dup2(fd, 1);
dup2(1, 2);
./a.out 2>&1 > outfile
dup2(1, 2);
dup2(fd, 1);
fcntl(2)
复制文件描述符
获得/设置文件状态标志
获得/设置文件描述符标志
获得/设置异步io所有权
获得/设置记录锁
标准io

文件流:FILE结构:fd,buf,bufsize,errflag,标准io打开文件的标记
标准输入文件流stdin 标准输出文件流stdout 标准错误输出stderr
缓冲
行缓冲stdout/stdin
无缓冲stderr
全缓冲
如何刷新缓存区
行缓冲遇到‘\n‘
全缓冲写满了
进程终止了
fflush(3)
打开
FILE *fopen(const char *path, const char *flag);
flag:r/r+/w/w+/a/a+
读写
字节
fgetc(3) / fputc(3) getc(3) / putc(3) getchar(3)/putchar(3)

fgets(3) / fputs(3) puts(3)
二进制
int fread(char *buf, int size, int nmemb, FILE *fp);
int fwrite(const char *buf, int size, int nmemb, FILE *fp);
格式化
printf(3) / scanf(3)
fprintf(3) / snprintf(3)
关闭
fclose(3)
偏移量(定位文件流位置)
fseek(3) / ftell(3)/rewind(3)
临时文件
tmpfile(3)
文件io和标准io区别与联系

文件io:

  系统调用

  实时性高

  效率低

  不能跨平台

标准io:

  库函数

  带缓存区

  合并系统调用,减少io次数,提高效率

  实时性低

高级编程 ---IO总结

原文:https://www.cnblogs.com/Yangon77/p/14551456.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!