unix期末复习2.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
unix期末复习2

这个专题是关于文件读写的操作,基本的有write,open,close,lseek等。 1.open函数 打开文件 #include fcntl.h int open(const char *pathname, int flag); int open(const char *pathname, int flag, mode_t mode);//只有新创建文件时才会使用该函数 //返回值,如果成功返回文件描述符,如果出错返回-1 使用open返回的文件描述符作为参数传递给write或read,按照惯例,UNIX中文件描述符0与标准输入相关联,文件描述 符1与标准输出相关联,文件描述符2与标准出错输出相关联。依照POSIX标准,0、1、2通常被替换成符号常量STDIN_FILENO、 STDOUT_FILENO、STDERR_FILENO(定义在头文件unistd.h中)。文件描述符的范围为0~OPEN_MAX。 pathname为文件的绝对路径或相对路径。 flag用于指定文件的打开/创建模式,这3个常量定义在fcntl.h中,这3个参数是必选的,而且只能选择一个: O_RDONLY ? ? ? 只读模式 O_WRONLY????? 只写模式 O_RDWR ? ? ? ? ? 读写模式 下面的常量是可选的: O_APPEND?????? 每次写操作都写入文件的末尾。 O_CREAT??????? 如果指定文件不存在,则创建这个文件。如果存在则直接打开文件。如果创建新文件,而mode参数没有指定, 则创建的文件权限不定。 O_EXCL ? ? ? 如果文件不存在,则返回错误。如果同时指定了O_CREAT,而文件已经存在,则会出错。 用此测试一个文件 是否存在,如果不存在,则创建此文件。 O_TRUNC??????? 如果文件存在,并且以只写/读写方式打开,则清空文件全部内容。 O_NOCTTY?????? 如果路径名指向终端设备,不要把这个设备用作控制终端。 O_NONBLOCK???? 如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)。 下面三个标志也是可选的,他们是Single UNIX Specification中同步输入和输出选项的一部分: O_DSYNC??????? 等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。? O_RSYNC??????? read 等待所有写入同一区域的写操作完成后再进行。 O_SYNC???????? 等待物理 I/O 结束后再 write,包括更新文件属性的 I/O。 可选参数可以和必选参数一起使用,并且可以使用多个,如果要以读写方式打开一个文件,如果该文件已经存在,则 将文件清空,如果没有存在,则新创建文件,flag应该为:O_WRONLY | O_CREAT | O_TRUNC mode用于在创建新文件时指定文件的权限,参数的: 函数2:write与read 将标准输入复制到标准输出 #include apue.h #define BUFSIZE 10 int main() { int n; char buf[BUFSIZE]; while((n = read(STDIN_FILENO, buf, BUFSIZE)) 0 ) //执行程序时从标准输入读,等待键盘输入 if (write(STDOUT_FILENO, buf, n) != n)//将从键盘中读到的字节写到标准输出 printf(write error\n); if (n 0) printf(read error); exit(0); } 补充:带缓存与不带缓存 先来看看不带缓存的I/O和标准(带缓存的)I/O都有那些 不带缓存的I/O:???????read,write,open...... 标准(带缓存的)I/O:?fgets,fread,fwrite..... 这里使用两个对应的函数进行比较: ssize_t write(int filedes, const void *buff, size_t nbytes) size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp) 上面的buff和ptr都是指应用程序自己使用的buffer,实际上当需要对文件进行写操作时,都会先写到内核所设的缓冲存储器。如果该缓存未满,则并不将其排入输出队列,直到缓存写满或者内核再次需要重新使用此缓存时才将其排入磁盘I/O输入队列,再进行实际的I/O操作,也就是此时才把数据真正写到磁盘,这种技术叫延迟写。 如果

文档评论(0)

zhanghc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档