复制文件的时候,如果源文件被别的进程修改,那么复制的文件是修改前的文件还是修改后的文件?

时间:2022-03-11 20:59:12
复制文件的时候,如果源文件被别的进程修改,那么复制的文件是修改前的文件还是修改后的文件?
可以防止别的进程写文件么?

22 个解决方案

#1


没法防止写哈,通过程序设计解决。

#2


Linux下可以多个进程在操作文件时对文件加锁进行互斥,但如果进程不遵循这个规则,就无法达到效果
Windows倒是可以用独占访问

#3


那如果我有一个日志文件需要先复制,在清空它,但是遇到其他用户登录那么它还是会记录,在我复制的时候,要怎么解决这个问题呢?

#4


引用 3 楼 qingfeideyi 的回复:
那如果我有一个日志文件需要先复制,在清空它,但是遇到其他用户登录那么它还是会记录,在我复制的时候,要怎么解决这个问题呢?

mv test.log /var/tmp/test.log
:>test.log

#5


1.所有读写该日志的进程都做加锁互斥
2.使用日志服务程序,所有读写日志操作都通过该程序完成,参考rsyslogd

#6


引用 4 楼 ljc007 的回复:
Quote: 引用 3 楼 qingfeideyi 的回复:

那如果我有一个日志文件需要先复制,在清空它,但是遇到其他用户登录那么它还是会记录,在我复制的时候,要怎么解决这个问题呢?

mv test.log /var/tmp/test.log
:>test.log

大哥,那在mv的过程中此日志会被系统进程写入么?

#7


引用 5 楼 zgglj 的回复:
1.所有读写该日志的进程都做加锁互斥
2.使用日志服务程序,所有读写日志操作都通过该程序完成,参考rsyslogd

系统进程要进入日志你怎么互斥哦。。有系统互斥的专用变量么?

#8


Linux没有像windows那样的独占访问
你描述的有系统进程参与的日志,你也在读写,没法做到互斥哈
除非你修改内核或者对所有进程做注入,拦截读写操作。。。。。为了日志这样得不偿失吧

#9


引用 8 楼 zgglj 的回复:
Linux没有像windows那样的独占访问
你描述的有系统进程参与的日志,你也在读写,没法做到互斥哈
除非你修改内核或者对所有进程做注入,拦截读写操作。。。。。为了日志这样得不偿失吧

那要怎么处理呢?

#10


这要看是在复制文件的写之前还是之后了!

#11


引用 10 楼 max_min_ 的回复:
这要看是在复制文件的写之前还是之后了!

就是要在复制文件的途中不能写入。。

#12


mv test.log /var/tmp/test.log
:>test.log

#13


引用 12 楼 u012552017 的回复:
mv test.log /var/tmp/test.log
:>test.log

:>test.log 这个是啥意思 球普及 谢谢。。

#14


引用 6 楼 qingfeideyi 的回复:
大哥,那在mv的过程中此日志会被系统进程写入么?

你亲自测试一下吧

#15


引用 13 楼 qingfeideyi 的回复:
:>test.log 这个是啥意思 球普及 谢谢。。

生产一个空文件或者清空文件内容

#16


引用 15 楼 ljc007 的回复:
Quote: 引用 13 楼 qingfeideyi 的回复:

:>test.log 这个是啥意思 球普及 谢谢。。

生产一个空文件或者清空文件内容

感谢。。

#17


引用 15 楼 ljc007 的回复:
Quote: 引用 13 楼 qingfeideyi 的回复:

:>test.log 这个是啥意思 球普及 谢谢。。

生产一个空文件或者清空文件内容

大侠们 能说明一下这样做的原理么?

#18


引用 17 楼 qingfeideyi 的回复:
大侠们 能说明一下这样做的原理么?

把一个空操作的输出重定向到一个文件

#19


引用 18 楼 ljc007 的回复:
Quote: 引用 17 楼 qingfeideyi 的回复:

大侠们 能说明一下这样做的原理么?

把一个空操作的输出重定向到一个文件

版主,小弟的意思是mv test.log /var/tmp/test.log这句执行的时候其他系统进程如果写这个日志文件么?

#20


引用 19 楼 qingfeideyi 的回复:
版主,小弟的意思是mv test.log /var/tmp/test.log这句执行的时候其他系统进程如果写这个日志文件么?

你的实际环境里面测试结果是怎样的呢?

#21


实际测试还没出现问题
但是如果数据量极大地情况下
不知道会不会有问题
所以才想问这个执行这个命令的时候系统进程如果写这个日志文件么会不会问题。。

#22


该回复于2014-01-09 09:12:25被管理员删除

#1


没法防止写哈,通过程序设计解决。

#2


Linux下可以多个进程在操作文件时对文件加锁进行互斥,但如果进程不遵循这个规则,就无法达到效果
Windows倒是可以用独占访问

#3


那如果我有一个日志文件需要先复制,在清空它,但是遇到其他用户登录那么它还是会记录,在我复制的时候,要怎么解决这个问题呢?

#4


引用 3 楼 qingfeideyi 的回复:
那如果我有一个日志文件需要先复制,在清空它,但是遇到其他用户登录那么它还是会记录,在我复制的时候,要怎么解决这个问题呢?

mv test.log /var/tmp/test.log
:>test.log

#5


1.所有读写该日志的进程都做加锁互斥
2.使用日志服务程序,所有读写日志操作都通过该程序完成,参考rsyslogd

#6


引用 4 楼 ljc007 的回复:
Quote: 引用 3 楼 qingfeideyi 的回复:

那如果我有一个日志文件需要先复制,在清空它,但是遇到其他用户登录那么它还是会记录,在我复制的时候,要怎么解决这个问题呢?

mv test.log /var/tmp/test.log
:>test.log

大哥,那在mv的过程中此日志会被系统进程写入么?

#7


引用 5 楼 zgglj 的回复:
1.所有读写该日志的进程都做加锁互斥
2.使用日志服务程序,所有读写日志操作都通过该程序完成,参考rsyslogd

系统进程要进入日志你怎么互斥哦。。有系统互斥的专用变量么?

#8


Linux没有像windows那样的独占访问
你描述的有系统进程参与的日志,你也在读写,没法做到互斥哈
除非你修改内核或者对所有进程做注入,拦截读写操作。。。。。为了日志这样得不偿失吧

#9


引用 8 楼 zgglj 的回复:
Linux没有像windows那样的独占访问
你描述的有系统进程参与的日志,你也在读写,没法做到互斥哈
除非你修改内核或者对所有进程做注入,拦截读写操作。。。。。为了日志这样得不偿失吧

那要怎么处理呢?

#10


这要看是在复制文件的写之前还是之后了!

#11


引用 10 楼 max_min_ 的回复:
这要看是在复制文件的写之前还是之后了!

就是要在复制文件的途中不能写入。。

#12


mv test.log /var/tmp/test.log
:>test.log

#13


引用 12 楼 u012552017 的回复:
mv test.log /var/tmp/test.log
:>test.log

:>test.log 这个是啥意思 球普及 谢谢。。

#14


引用 6 楼 qingfeideyi 的回复:
大哥,那在mv的过程中此日志会被系统进程写入么?

你亲自测试一下吧

#15


引用 13 楼 qingfeideyi 的回复:
:>test.log 这个是啥意思 球普及 谢谢。。

生产一个空文件或者清空文件内容

#16


引用 15 楼 ljc007 的回复:
Quote: 引用 13 楼 qingfeideyi 的回复:

:>test.log 这个是啥意思 球普及 谢谢。。

生产一个空文件或者清空文件内容

感谢。。

#17


引用 15 楼 ljc007 的回复:
Quote: 引用 13 楼 qingfeideyi 的回复:

:>test.log 这个是啥意思 球普及 谢谢。。

生产一个空文件或者清空文件内容

大侠们 能说明一下这样做的原理么?

#18


引用 17 楼 qingfeideyi 的回复:
大侠们 能说明一下这样做的原理么?

把一个空操作的输出重定向到一个文件

#19


引用 18 楼 ljc007 的回复:
Quote: 引用 17 楼 qingfeideyi 的回复:

大侠们 能说明一下这样做的原理么?

把一个空操作的输出重定向到一个文件

版主,小弟的意思是mv test.log /var/tmp/test.log这句执行的时候其他系统进程如果写这个日志文件么?

#20


引用 19 楼 qingfeideyi 的回复:
版主,小弟的意思是mv test.log /var/tmp/test.log这句执行的时候其他系统进程如果写这个日志文件么?

你的实际环境里面测试结果是怎样的呢?

#21


实际测试还没出现问题
但是如果数据量极大地情况下
不知道会不会有问题
所以才想问这个执行这个命令的时候系统进程如果写这个日志文件么会不会问题。。

#22


该回复于2014-01-09 09:12:25被管理员删除