killxdcj.tk
HTTP/1.1 203 服务器:nginx 访问时间:2019年06月26日 16:11:44 类型:text/html;charset=UTF-8 文件大小:689 连接:keep-alive 缓存控制:不缓存 其他指令:不缓存 过期时间:1970年01月01日 08:00:00 Web服务器:ip-172-31-28-245 设置Cookie:JSESSIONID=CEAED8C29A50807091DD02299812EFC0; Path=/; HttpOnly 网站编码:UTF-8
XDCJ的小窝逝者不死,必将再起,其势更烈!登陆账号| 注册账号主页博客相册资料留言2013-10-25 10:04:06《UNIX环境高级编程》笔记--文件I/O:sync,fsync,fdatasync,fcntl,ioctl,/dev/fd1.sync,fsync和fdatasync传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满 或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写 (delayed write)。延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到 磁盘上。当系统发生故障时,这种延迟可能造成文件更新内容的丢失。为了保证磁盘上实际文件系统与缓冲区高速缓存中内容的一致性,UNIX系统提供了 sync、fsync和fdatasync三个函数。函数的定义如下:include <unistd.h>int fsync(int filedes);int fdatasync(int filedes);Returns: 0 if OK, -1 on errorvoid sync(void)sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数。这就保证了定期冲洗内核的块缓冲区。命令sync也调用sync函数。fsync函数是系统提供的系统调用。只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。接受的时一个Int型的文件描述符。fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。2.fcntl函数fcntl函数改变已打开文件的性质,函数定义如下:#include <fcntl.h>int fcntl(int filedes, int cmd, ... /* int arg */ );Returns: depends on cmd if OK (see following), -1 on errorfcntl有5种功能:1.复制一个现有的描述符。(cmd = F_DUPFD)2.获取/设置文件描述符标记。(cmd = F_GETFD 或 F_GETFD)3.获取/设置文件状态标记。(cmd = F_GETFL 或 F_SETFL)4.获取/设置异步I/O所有权。(cmd = F_GETOWN 或 F_SETOWN)5.获取/设置记录锁。(cmd = F_GETLK,F_SETLK或F_SETLKW)F_DUPFD:复制一个文件描述符,新文件描述符作为返回值。它是尚未打开的各描述符中大于或者等于第三个参数arg值中各值的最小值。新的描述符有它自己的一套文件描述符标志,其中close_on_exec标志被清除。F_GETFD:返回文件描述符对应的文件描述符标志,当前只定义了一个文件描述符标志FD_CLOEXEC(close_on_exec)。F_SETFD:设置文件的文件描述符标志,新标志按第三个参数设置。F_GETFL:获取文件的状态标志作为函数的返回值。这边状态标志就是open函数中的状态。不幸的是,三个访问标志位(O_RDONLY,O_WRONLY和O_RDWR)并不各占一位(这3种标志的值分别是0,1,2,由于历史原因,这三种值是互斥),因此首先必须用屏蔽字O_ACCMODE获取访问模式位,然后将结果与这三种值中的任一种做比较。F_SETFL:将文件状态设置为第三个参数的值。可以更改的几个标志位是:O_APPEND,O_NONBLOCK,O_SYNC,O_DSYNC,O_RSYNC,O_FSYNC,O_ASYNC。fcntl的文件状态标志:File status flagDescriptionO_RDONLYopen for reading onlyO_WRONLYopen for writing onlyO_RDWRopen for reading and writingO_APPENDappend on each writeO_NONBLOCKnonblocking mode(非阻塞模式)O_SYNCwait for writes to complete (data and attributes)O_DSYNCwait for writes to complete (data only)O_RSYNCsynchronize reads and writes(同步读写)O_FSYNCwait for writes to complete (FreeBSD and Mac OS X only)O_ASYNCasynchronous I/O (FreeBSD and Mac OS X only)(异步I/O)F_GETOWN:取当前接受SIGIO和SIGURG信号的进程ID和进程组ID。这两种信号会在以后介绍异步IO时说明。F_SETOWN:设置接受SIGIO和SIGURG信号的进程ID和进程组ID。正的arg指定一个进程ID,负的arg表示等于arg绝对值的一个进程组ID。3.ioctl函数ioctl函数是I/O操作的杂物箱,不能用本页其它函数标示的I/O操作通常都能用ioctl标示。终端I/O是ioctl的最大使用方面。函数定义如下:#include <unistd.h> /* System V */#include <sys/ioctl.h> /* BSD and Linux */#include <stropts.h> /* XSI STREAMS */int ioctl(int filedes, int request, ...);Returns: -1 on error, something else if OK具体功能以后再记。4./dev/fd较新的系统都提供名为dev/fd的目录,其目录项的名为0,1,2等文件,打开dev/fd/n等同于复制描述符n(假定描述符n是打开的)。阅读数(74)|评论数(0)[阅读全文]2013-10-25 09:35:33《UNIX环境高级编程》笔记--文件I/O:文件共享,原子操作,dup,dup21.文件共享内核使用3种数据结构来表示打开的文件。每个进程在进程表中有一个记录项,记录项中含有一张打开文件描述符表。内核为所有打开文件维持一张文件表。每个打开文件都有一个V节点结构。v节点包含了文件类型和对此文件进行各种操作的函数指针。下图显示了进程三个表之间的关系:下图显示了两个独立进程各自打开相同文件:2.原子操作允许原子性的定位搜索和执行I/O操作:#inc
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2026-01-12 06:46, Process in 0.0054 second.