今天,某同事向我反应,我写的程序有问题。出问题的大致功能是这样的,我需要在不修改原文件的情况下,备份一个新的文件出来(新文件最后一小部分内容还保存在内存)。实现方法的方法很简单,读取旧文件,然后将内容写到新文件,读取完旧文件后,再将内存部分内容写到新文件。现在问题出来了,备份的新文件比旧文件小很多,只看到一小部分内容(我猜是原先保存在内存的那部分)。在同事的电脑上测试,每次都可以重现,但我在我的电脑上测试总是无法重现。没办法,只能在单元测试工具上添加一个unit test case来跟踪测试。重现了,可以重现了,仔细跟踪,原因是这样的...
首先,为了不让其他线程修改新文件,我以mode为0的模式打开新文件(假设名叫file1,如果文件不存在,就创建一个),然后往里面写内容,直到写完内容(还有一小部分保存在内存)。当需要备份file2文件打开file1时,打开文件失败(因为mode为0,无可读不可写),导致无法备份file1文件里的内容,只保存了内存部分。那为什么同事电脑上每次都可以重现,而我的电脑上却不能重现呢。这就是超级用户的超级权限,我的电脑上使用的是root用户测试,而同事使用的是普通用户。看个例子就知道了(使用普通用户和root用户分别创建一个文件,改mode为0,再读取该文件,结果root可以读,而普通用户不可以读)
//测试普通用户
[welkin@dev91 ~]$ cd /tmp/
[welkin@dev91 /tmp]$ touch welkin
[welkin@dev91 /tmp]$ chmod 000 welkin
[welkin@dev91 /tmp]$ cat welkin
cat: welkin: 权限不够
[welkin@dev91 /tmp]$
//测试root用户
[root@dev91 tmp]# touch root
[root@dev91 tmp]# chmod 000 root
[root@dev91 tmp]# cat root
[root@dev91 tmp]#
看两个文件的mode全部是0
[welkin@dev91 /tmp]$ ll root welkin
---------- 1 root root 0 4月 22 19:03 root
---------- 1 welkin welkin 0 4月 22 19:02 welkin
[welkin@dev91 /tmp]$
这就是超级用户的超级权限,通过这个例子看出,即使改mode为0,当用root运行程序,其他线程也可以读的。如果不想让其他线程读,应该对文件加个线程锁,而不是把mode改为0。
总之,把文件的mode改为0是不安全的,可能会出现想让其他进程读的却读不了,而不想让其他线程读的,却可以读取到了
分享到:
相关推荐
平安银行电商见证宝(2 0)API接口说明标准接口版
I0501_见证取样送检见证人授权书
平安银行电商见证宝,资金账户,合规钱包接入文档
全量版平安银行电商见证宝系统的API接口文档v1.93:银行为每个会员提供的资金明细账户,属于下挂在资金汇总账户下的虚拟账户,记录每位会员在银行端的资金情况。一个会员只允许有一个子账户账号。
现场见证取样记录表,可以什么都不是,要个积分而已
基于Spring Boot + NIO实现的电商平台见证宝服务
检测取样送检见证人授权书 B 1.2 编号: 致: (质量监督站) (检测机构) 现委托 为 工程的 工程质量检测见证单位,负责该工程的见证取样送样工作。 具体见证人如下: 姓 名 签字笔迹 见证人证号 备注 ...
平安银行电商见证宝(2.0)API接口文档v1.93(全量版) (1)
见证取样人员能力评价系统答案.pdf见证取样人员能力评价系统答案.pdf见证取样人员能力评价系统答案.pdf见证取样人员能力评价系统答案.pdf见证取样人员能力评价系统答案.pdf见证取样人员能力评价系统答案.pdf
见证取样规范标准.pdf
2020见证人员能力提升考试.pdf2020见证人员能力提升考试.pdf2020见证人员能力提升考试.pdf2020见证人员能力提升考试.pdf2020见证人员能力提升考试.pdf2020见证人员能力提升考试.pdf2020见证人员能力提升考试.pdf2020...
学习郭林老师的见证消息推送时刻笔记,笔记未整理有点乱,有很多不足,希望大家指点,源代码随后上传
SQL Server 2005 无见证镜像实战
参考资料-抽芯-见证记录.zip
2022年见证取样继续教育考试题目附答案归类.pdf
数字见证-见证服务.emmx
湖北省检测监管平台V3.0见证取样人员能力考试.doc
见证取样员考试试题.doc
见证取样和送检制度 用于建筑工地 进原材料时 见证过取样 和 送检制度!
2021年见证取样员考试题库及答案.docx