the c programing language 学习过程8
glean 捡拾落穗; glean insight 深入了解 modeled模型化 peripheral外围的 himogeneous匀称的 intents 意图 excerpt摘录 intended预期的 underscore下划线 着重强调 collide 碰撞 retrieve取回 coalesced联合 合并
1读写文件前要向系统表示意图 俗称打开文件 系统会检查你的权限 如果OK 就会像程序返回一个非负整数 该整数成为文件描述符 file desriptors
如何时候输入/输出都通过文件描述符 而不是文件名(类似文件指针或者MSDOS的文件句柄)
2解释程序(shell)运行程序时打开三个文件 对应描述符为0 1 2 依次表示 stdin stdout stderr 程序从0读 从1 2写就不用担心打开文件的问题
prog <infile >outfile 重新定向输入输出
int n_read = read(int fd,char *buf,int n); //第一个为文件描述符 第二参数是数据的来源或者去向 第三参数是多少字节 bytes的数据要被传输
~ _written = write ~
每个函数都返回传输的字符数 读来说 返回0则是文件尾 -1 则是错误 写来说 如果有错误 那么实际写入数就会和请求的的数字不相等
3 open类似于fopen 但是返回的是一个文件描述符
int open (char *name,int flags,int perms); //name还是文件名 ,flags有以下几种,perms在这里说的程序都是0
o_rdonly 只读 o_wronly 只写 o_rdwr 读写
如 fd = open(name,o_rdonly,0); 如果打开一个不存在的文件会报错
4 int create(char *name,int perms); fd = creat(name,perms); 如果不能创建文件返回-1 否则返回文件描述符 如果文件已经存在 create会让他清空不会报错
其中perms控制了读写或者接入信息给所有者或者所有群或者其他人
比如0775 表示对所有者读写执行许可 对其他人和团体的读和执行许可
5vprintf对应printf 变长参数变为一个参数
vfprintf 和vsprintf对应fprintf和sprintf
close(int fd) 类似fclose 他是关闭描述符和文件链接(文件数有限制的一般为20)以供其他文件使用 但是不刷新缓存区
如果使用exit返回 所有的文件会被关闭
unlink(char *name)将文件name从文件系统中移除 类似remove
6long lseek(int fd,long offset,int orgin);将文件描述符fd的文件当前位置设置为offset offset是相对于origin的位置而言的
origin可以为0 1 2 分别代表 文件开始 当前位置 文件末尾开始算起
如在文件尾添加内容(unixshell 用重新定向》或者在fopen中用参数a)
lseek(fd,0L,2);
如要在开始处(反绕)
lseek(fd,0L,0); 0L可以写成 (long)0或者0 但是调用的时候会保持一致
之后大题介绍了下几个库里常用函数的 代码 有兴趣的话可以自己多看看