免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6198 | 回复: 7

[函数] 请问unix下的rename函数是原子操作么? [复制链接]

论坛徽章:
0
发表于 2004-06-15 09:28 |显示全部楼层
即要不然一步也不进行,要不就全进行完?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-06-15 10:06 |显示全部楼层

请问unix下的rename函数是原子操作么?

不是。
可以被信号中断。

论坛徽章:
0
发表于 2004-06-15 10:14 |显示全部楼层

请问unix下的rename函数是原子操作么?

信号除外

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-06-15 10:24 |显示全部楼层

请问unix下的rename函数是原子操作么?

没有信号,整个程序你都可以说是原子操作。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-06-15 10:29 |显示全部楼层

请问unix下的rename函数是原子操作么?

如果你是说rename失败的话,
会不会对修改的目录名或文件名有影响,
请man rename,会给你一个满意的答案。
以后请把问题描述清楚。

论坛徽章:
0
发表于 2004-06-16 13:30 |显示全部楼层

请问unix下的rename函数是原子操作么?

不是呀,比如 read就不是原子的,在执行过程中可能被其他操作打断,cpu不可能把时间片都分给read,系统调用本身就存在着可中断的和不可中断的,内核函数也是这样,试想一个等待换页的函数由于其特性,一般是不会被信号中断,我就是看了rename的手册页, 发现她是在libc库里实现的,所以不肯定是否是原子的,甚至有可能这个函数内部本身也block信号,不知道就不咬随便指责别人,至少好好看清楚别人说的在回帖,行么?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-06-16 14:51 |显示全部楼层

请问unix下的rename函数是原子操作么?

[quote]原帖由 "picobsd"]不是呀,比如 read就不是原子的,在执行过程中可能被其他操作打断,cpu不可能把时间片都分给read,系统调用本身就存在着可中断的和不可中断的,内核函数也是这样,试想一个等待换页的函数由于其特性,一般是不会被信..........[/quote 发表:

呵呵,首先向你道歉,我的确错误理解你的意思了。
要说到原子操作,很少的系统调用是原子操作的,
我就只知道一个系统调用是原子操作的。
你man一个系统调用时,如果是原子操作,
应该告诉你的。
还有,我不明白为什么你非要知道rename是不是原子操作?

论坛徽章:
0
发表于 2015-04-21 17:15 |显示全部楼层
从操作结果上来讲,RENAME被认为是一个用户级的原子操作:就是对于用户而言,要么这个文件被重命名了,要么就没有,这个是写在磁盘上的,是在系统断电CRASH等极端情况下仍有效的操作。就是说RENAME操作不像其它读写文件系统的操作,可能存在预读缓写等问题。

真正的原子操作,其实是CPU指令级的。RENAME 是一个函数,一个C函数,所以肯这不是。

还有一个问题是:当存在同名的文件或文件夹时,先删除再命名。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP