UNIX文件的共享
大家自觉的去检测是否加锁然后约束自己的行为;
强制锁,是OS内核的文件锁.每个对文件操作时,例如执行open、read、write等操作时,OS内部检测该文件是否被加了强制锁,如果加锁导致这些文件操作失败.也就是内核强制应用程序来遵守游戏规则; 例如vim使用建议锁来编辑一个文件,打开多个文件时会提示这个文件已加锁/处于编辑中.但是对于没有使用建立锁的编辑器依然可以打开并编辑这个文件,文件的状态取决于一个操作文件的进程. 4. dup和dup2函数:用于复制一个现存的文件描述符. #include <unistd.h> int dup(int filedes); //返回分配的是当前可用文件描述符的最小值 //它的操作等效于fcntl(filedes, F_DUPFD, 0); int dup2(int filedes, int filedes2); //复制结果为返回filedes2指定的描述符.如果filedes2指定的描述符已经打开,则先关闭它.如果filedes和filedes2相同则不关闭.它的操作等效于close(filedes2);fcntl(filedes, F_DUPFD, filedes2);但是dup2是一个原子操作,不用担心同步问题. 这两个函数返回的文件描述符与参数filedes共享一个文件表项.
5. sync, fsync和fdatasync函数 当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满.则并不将其排入输出队列.而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲区排入输出队列.然后待其到达队首时,才进行实际的I/O才做,这种输出方式成为延时写delayed write.可以减少磁盘I/O次数,缺点是降低了文件系统的更新次数.系统故障时可能造成内容丢失.UNIX系统提供了sync、fsync和fdatasync三个函数来保证磁盘上实际文件系统与缓冲区高速缓冲中内容的一致性. 进程名称 PID 所有者 文件描述符(cwd当前目录,数组标识当前文件描述符fd) ,类型可以是CHR, BLK等筛选选项:根据fd列筛选-d 根据pid筛选-p 多个条件应加逻辑运算符-a -o等 (逻辑或-o是默认设置).已知文件pathname查找信息lsof /file/file1 恢复删除的文件(如果这个文件被某个进程打开)lsof | grep server1.out第二个字段得到进程pid,第四个字段得到文件在该进程中的fd号然后/proc/<pid>/<fd>/ 打开文件/dev/fd/n等效于复制描述符n.例如:fd = open(“/dev/fd/0”, mode); 此时大多数系统都会忽略指定的mode,等效于fd=dup(0);描述符0和fd共享同一文件表项,其文件状态/访问权限和原有权限相同.某些系统提供路径名/dev/stdin、/dev/stdout和/dev/stderr.
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |