zoukankan      html  css  js  c++  java
  • 第十章I/O

    系统级i/o

    开始进程时的三个标准:

    标准输入(描述符0):STDIN_FILENO

    标准输出(描述符1):STDOUT_FILENO

    标准错误(描述符2):STDERR_FILENO

    文件位置:

    从文件开头起始的字节偏移量k。应用程序能够通过执行seek操作,显式设置文件当前位置

    open函数参数 :

    基本格式:open(char *file, int flags,mode_t mode)

    file:

    文件名带双引号表示

    flags:

    O_RDONLY:只读

    O_WRONLY:只写

    O_RDWR:可读可写

    mode:

    指定新文件的访问权限位,与后面的umask函数互用定义,在创建新文件利用

    umask:

    在打开文件前使用函数umask(umask)进行设置,参数可以先定义

    返回值:

    所在描述表的位置数值(int),出错为-1

    注意事项:

    可以定义各项参数值,只要带有头文件即可,具体实例后面练习有参考

    read and whrite读和写文件:

    基本格式:read/write(int fd,const void *buf, size_t n)

    fd:

    源文件的描述符

    n:

    拷贝最多n个字节

    buf:

    目标存储器位置

    返回:

    若成功则为实际传送的字节数量;-1表示错误;0表示EOF

    特别情况:

    读时遇到EOF:不足值表示为0

    从终端读文本行:行不足值等于文本行大小

    读和写网络套接字:网络不足值表示

    RIO包健壮包利用:

    RIO包会自动处理不足值。RIO提供了两类不同的函数:

    1 无缓冲的输入输出函数:

    这些函数直接在存储器和文件之间传送数据,没有应用级缓冲,他们对将二进制数据读写到网络和从网络读写二进制数据尤其有用

    2 带缓冲的输入函数:

    这些函数允许你高效地从文件中读取文本行和二进制数据,这些文件的内容缓存在应用级缓冲区内,类似于像printf这样的标准I/O函数提供的缓冲区。

    是线程安全的,它在同一个描述符上可以被交错地调用。例如,可以从一个描述符中读一些文本行,然后读取一些二进制数据,接着再多读取一些文本行。

    stat/fstat读取文件元数据

    基本格式:int stat(const filename, struct stat buf)/ int fstat(int fd, struct *buf);

    stat以文件名为输入,fstat以文件描述符为输入

    返回:成功为0;出错为-1

    共享文件 

    父子进程共享文件:子进程会有一个父进程描述符表项的副本,父子进程打开相同的文件表集合,共享相同的文件位置。在内核删除相应的文件表表项之前,父子进程都必须关闭相应的描述符表项。

    文件表:当前文件位置,引用计数(当前指向该表项的描述符项数),以及一个指向V-node表对应表项的指针

    v-node表:包括st_mode和st_size成员

    重定向

    dup2函数:

    基本格式:int dup2(int oldfd,int newfd)

    功能描述:dup2函数拷贝描述符表表项oldfd到描述符表表项newfd,覆盖描述表表项newfd以前的内容。如果newfd已经打开,dup2会在拷贝oldfd之前关闭newfd

    注意事项:在调用函数时旧文件没有引用

    练习:

    练习1

    练习2:

    练习3:

    练习5:

     

    练习总结:

    实验操作全是文件操作函数,要利用文件的创建的基础上完成操作

    实验的参数格式要标准

    练习依赖于以往学习的堆栈

    练习遇到的问题以及解决的方法:

    问题:没有头文件,或头文件错误

    方法:练习的头文件并没有被复写,可以自己加入一些必要的头文件或者自己复写头文件

    参考资料:

    课本

  • 相关阅读:
    数据字典/动态性能视图
    参数管理
    expdp实现oracle远程服务器导出到本地
    jquery 操作单选按钮
    vs2012加载T4MVC模板
    Asp.net Mvc 过滤器执行顺序
    oracle版本及字符集查询
    ora-01658: 无法为表空间*****中的段创建 INITIAL 区
    SmtpClient发送邮件
    盒模型padding和margin对滚动条位置的影响
  • 原文地址:https://www.cnblogs.com/chuishi/p/4947924.html
Copyright © 2011-2022 走看看