linux下IO相关知识
来源:互联网 发布:淘宝一键复制有坏处吗 编辑:程序博客网 时间:2024/06/06 00:56
输入:读,数据由内核空间流向用户空间。
输出:写,数据由用户空间流向内核空间。
库:功能性函数的集合,运行在用户空间,库最终是通过系统调用实现。
系统调用:内核给用户的接口,运行在内核空间。
标准IO:操作的是流,是库,带缓存的IO,高级IO
文件IO:操作的是文件描述符,是系统调用,不带缓存(内核缓存),低级IO
Man 1 命令 man 2 系统调用 man 3 库 man 7 列表
标准IO流:stdin标准输入,stdout标准输出,stderr标准错误
文件流指针 FILE *
Ctags–R生成tags 在.vimrc里添加tags路径 set tags+=
Vim –t 追各种函数,类型 ctrl+]追踪
缓冲区:在内存开辟,意义,减少系统调用次数
全缓存:操作文件,4096,刷新用fflush
行缓存:终端,1024,遇到\n会刷新
不缓存:不带缓存,对应stderr
FILE * fopen(路径,mode(打开方式)):打开文件,获得文件流指针。
r:只读,文件指针指向文件开头,文件不存在,报错。
r+:读写,文件指针指向文件开头,文件不存在,报错。
w:只写,清空,文件指针指向文件开头,文件不存在创建。
w+:读写,清空,文件指针指向文件开头,文件不存在创建。
a:只写,追加,文件指针指向文件末尾,从末尾写,不存在创建。
a+:读写,追加,从文件开头开始读,从末尾开始写,不存在创建。
t:ascii码文件。
b:二进制。
函数出错设置errno(错误信息列表),perror(“”)。
Fflush(FILE *)刷新缓冲区。
Fclose(FILE *);刷新缓冲区,关闭流。错误返回EOF,设置errno。
Fclose再次调用会产生未知错误。
Feof(FILE *)检查是否到达文件末尾,如果末尾返回非零值。
fgetc(FILE *)成功返回一个ascii码,错误和到达文件末尾返回EOF
fputc(int,FILE *);错误返回EOF
fgets(char *,size,FILE *);读到文件末尾或者\n会停止,最后一个字节填充\0。错误或者到达文件末尾返回值NULL。
Fputs(char *,FILE *);写入到流,忽略\0。
Fread(void *,每个对象的大小,要读多少个对象,FILE *);成功返回读到的对象的个数。
到达文件末尾返回0.
Fwrite(void *,每个对象的大小,需要写入的对象的个数,FILE *);
Fseek(FILE *,offset,相对的位置);SEEK_SET从文件头开始,SEEK_CUR当前位置,SEEK_END文件末尾。成功返回0,错误返回-1.
Ftell(FILE *);返回当前文件指针位置。
Rewind(FILE *);文件指针偏移到头。
t = time(NULL);
文件IO
操作的是文件描述符,最小的未用非负整数。
0 1 2是系统预定义的3个描述符,对应标准IO里的stdin,stdout,stderr。
open(路径,flags,mode);
flags:O_RDONLY只读,O_WRONLY只写,O_RDWR读写 --必须有
O_CREAT创建文件(设置权限mode,mode& ~umask,umask文件权限掩码),
O_EXCL检查文件是否存在,不存在报错,errno文件不存在ENOENT。
O_TRUNC清空文件,O_APPEND追加模式。O_NONBLOCK非阻塞。
r+: O_RDWR|O_EXCL
w: O_WRONLY|O_CREAT|O_TRUNC,0666
a+:O_RDWR|O_CREAT|O_APPEND,0666
close(文件描述符); 再次调用close时会产生未知错误。
成功返回0,错误返回-1,设置errno。
Read(文件描述符,buf,size);返回值:读到的个数,到达文件末尾返回0,错误返回-1,设置errno。
Bzero(buf,size)清空字符串,置为\0
Memset(buf,ascii,size);字符串置位。
Write(同上);同上
Lseek(文件描述符,偏移量,相对位置);相对位置:SEEK_SET,SEEK_CUR,SEEK_END。
返回值:相对文件头的偏移量/位置。
Stat(路径,结构)
对目录的操作。
Opendir(路径)打开目录,获得目录流
Readdir(DIR *)
静态库:lib库名.a
链接时载入静态库,生成目标代码,体积比较大,每生成一个可执行文件,就需要一份静态库,最终可以与静态库断开关系。生成静态库:1.gcc –c 文件.c 2.ar -cr lib库名.a 文件.o
使用静态库:gcc xxx.c -L库路径 -l库名
拷贝库到/lib或者/usr/lib下然后gccxxx.c -l库名
动态库:lib库名.so
运行时载入,目标代码体积较小,所有的可执行文件公用一份动态库。
生成动态库:1. gcc–c -fpic(位置无关码) 文件.c 2. gcc–shared 文件.o -o lib库名.so
使用动态库:
将动态库放到/lib或者/usr/lib在LD_LIBRARY_PATH环境变量中加上库所在路径。
添加/etc/ld.so.conf.d/*.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。
gcc xxx.c -l库名
- linux下IO相关知识
- linux下 文件IO 相关
- Linux下makefile相关知识
- IO相关知识
- Java IO相关知识
- java IO相关知识
- Linux下内存释放问题相关知识
- Linux下内存释放问题相关知识
- Linux 下多核CPU相关知识
- Linux下内存释放问题相关知识
- Linux下内存释放问题相关知识
- linux下共享内存相关知识
- Linux 下多核CPU相关知识
- Linux 下多核CPU相关知识
- linux下Apache安装的相关知识
- Linux下线程相关知识总结
- linux下bin的相关知识
- Linux 下源码编译相关知识
- 清除浮动的几种常用的方法
- 基于netty的心跳检测
- LeetCode 387. First Unique Character in a String
- 【矩阵相关】[Codeforces - 736D]Permutations
- APICLOUD平台初体验(一个任务系统的开发)
- linux下IO相关知识
- 报数(类似猴子选大王)
- POJ 2502 - Subway(单源最短路)
- 在不损失数据的情况下如何扩展C盘
- 剑指offer——面试题28:字符串的排列
- matlab—图像显示
- 使用libsvm实现文本分类
- java 访问权限控制
- 入职一周