免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1025 | 回复: 0
打印 上一主题 下一主题

Linux 下创建同文件名文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-01 08:43 |只看该作者 |倒序浏览

================================
Author: taoyuetao
Email:
tao_yuetao@yahoo.com.cn
Blog: taoyuetao.cublog.cn
2006-12-22
================================

linux
下创建相同文件名时,系统不会提示该文件已经存在,也不会创建该文件,这与windows的习惯不同,
我查看了busybox中touch的源代码,
do {
  if (utime(*argv, NULL)) {
   if (errno == ENOENT) { /* no such file*/
    if (flags & 1) { /* Creation is disabled, so ignore. */
     continue;
    }
    /* Try to create the file. */
    fd = open(*argv, O_RDWR | O_CREAT,
        S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
        );
    if ((fd >= 0) && !close(fd)) {
     continue;
    }
   }
   status = EXIT_FAILURE;
   bb_perror_msg("%s", *argv);
  }
} while (*++argv);
发现首先调用了函数utime对指定文件的时间进行更新,如果返回错误,就认为该文件不存在,需要创建,而如果修改时间正确,
就会正确返回,系统就不会有任何提示。
     56     do {
     57         if (utime(*argv, NULL)) {
     58             if (errno == ENOENT) {  /* no such file*/
     59                 if (flags & 1) {    /* Creation is disabled, so ignore. */
     60                     continue;
     61                 }
     62                 /* Try to create the file. */
     63                 fd = open(*argv, O_RDWR | O_CREAT,
     64                           S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
     65                           );
     66                 if ((fd >= 0) && !close(fd)) {
     67                     continue;
     68                 }
     69             }
     70         }
     71         errno = EEXIST;
     72         status = EXIT_FAILURE;
     73         bb_perror_msg("%s", *argv);
     74     } while (*++argv);
如果修改时间时正确,则强制将返回状态改为EEXIST,并返回,系统就会提示该文件已经存在



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31100/showart_251460.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP