当前位置:  技术问答>linux和unix

关于文件读写的问题

    来源: 互联网  发布时间:2017-03-24

    本文导语:  环境: linux 2.6 1, 多个进程同时写文件的话, 每一个进程open一个自己的文件句柄, 然后同事对一个文件进行读写, 每一个读写是原子的么? 会不会比如: 进程A写了一半,里面又有进程B写进去的内容? 需不需要加锁呢? ...

环境: linux 2.6
1, 多个进程同时写文件的话, 每一个进程open一个自己的文件句柄, 然后同事对一个文件进行读写, 每一个读写是原子的么? 会不会比如: 进程A写了一半,里面又有进程B写进去的内容? 需不需要加锁呢?

2, 单个进程的多线程共享一个文件句柄, 是否会发生比如A线程还没写完,B文件又写了一部分进去, 也就是说A线程无法输出一条完整的日志,B线程就写进去了, 需要给文件加锁么?

3, 打开文件如果为append方式,用fprintf,或者write,fwrite等方式, 会不会出现问题1,2的情况.

4, 写文件过程中, linux是否有它自己的输出缓冲区, 也就是说不是立刻调用IO,而是缓冲区满了之后才输出出来. 但是我在后台跟踪日志的时候,还是能够看到及时消息的, 为什么? 它刷新文件的机制是什么呢?

请各位达人指教, 能否有什么书可以描写这部分, 我对这一块一直有点迷糊, 多谢

|

    就三楼说的,请教一下啊
1、多进程需要互斥加锁没问题,但多线程时,用的是同一打开文件表项,就是用的同一个偏移指针,不用加锁吧?
2、关于文件缓存机制,看APUE和这篇文件http://www.ibm.com/developerworks/cn/linux/l-cn-directio/index.html

|
我明白楼主的意思,但是write在写入数据小于一定长度就视为原子操作,而楼主的中文……且算作是20个字节吧!这个长度是很小的!所以楼主的程序中单次write不会被打断,也就是说不会输出类似:“这是来自线程1的这是来自线程2的数据n数据n”这样的效果。
所以楼主的程序肯定是一句一句的输出出来没问题,但是同一线程的1000句会被打断输出,举个例子,就是第一行是线程1输出的,但是你不能保证第二句也是线程1输出的,这就是问题所在。但是如果楼主要的就是这样,那确实,不用加锁!

但是,我们的程序一般情况下是要求每个线程多句写入的内容要在文件中连续。另外,程序大多读写都有,如果是这样,那楼主的程序就会问题百出。所以针对此情况linux提供了读写锁机制!

如果资源并发的被访问就要加锁,应尽量避免并发访问,其实这是常识性的东西。

    
 
 

您可能感兴趣的文章:

  • Java读写包括中文的txt文件时不同编码格式问题解决
  • linux 下能否读写.dbf 或者.xls格式的文件,怎样读写?高手指点,拜谢!!!
  • 文件或文件夹,如何指定某用户的读写权限?
  • 在中断服务程序里可以进行文件的读写操作么?
  • 有谁知道,Linux下文件的读写原理是怎样的?急
  • 请问unix下修改文件和文件夹读写权限的问题
  • 父子进程读写文件问题
  • 如何以独占式读写文件?
  • j2me读写,修改本地文件
  • samba文件读写问题
  • 怎样将linux系统底下一个文件夹的只读属性改为可读写的属性?
  • Linux内核中文件进行读写操作的问题
  • ELF文件读写库 ELFIO
  • JAVA Applet能够读写文件吗?
  • 读写大文件出错
  • Java读写MPX文件包 MPXJ
  • 使用mmap可以读写文件,这是怎么实现的?
  • linux下,通过jsp网站进行文件读写,提示permission denied
  • 在linux下有没有想windows下vc一样读写ini 配置文件的库或函数
  • Java中有没有什么类来实现读写注册表文件?
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 菜问题:请问如何根据文件中的一段内容查找文件路径和文件名称,在线等候
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • shell脚本剪切文件文件,并生成新文件的问题
  • 文件编码及UTF-8、BOM、0XFEFF相关问题
  • GUI问题:如何使用文件选择对话框保存文本文件,图像文件??
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • 不解,上传文件后压缩文件的中文文件名问题,转码也不管用?
  • ext3文件系统问题:文件在硬盘上的物理位置,一组文件要据此排序。
  • jsp文件访问jar文件,路径问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • 在MyEclipse中设开启xml文件自动提示和自动完成功能
  • vi 中编辑两个文件,怎样从其中一个文件拷一段内容到另一个文件中。(同时打开两个文件)
  • MyEclipse如何查看和设置文件编码格式相关操作
  • 怎么统计一个文件夹下有多少个文件(不包括文件夹)
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?
  • 设置sharepoint 2010文档库中的 pdf文件在浏览器中访问的打开方式
  • 如何用socket一次传输多个文件,如何确定文件一个文件结束
  • windows/windows 7/windows 8 下打开查看、修改及保存超大(GB级)文本文件及其它类型文件的工具-PilotEdit
  • 如何删除某个目录下除了指定文件夹之外的所有文件和文件夹
  • Linux_centos_redhat下tar命令解压tgz文件方法
  • solaris文件系统删除文件后文件夹大小不变


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,