the c programing language 学习过程8

时间:2022-01-25 15:50:46

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 但是调用的时候会保持一致

之后大题介绍了下几个库里常用函数的 代码 有兴趣的话可以自己多看看