taoyuetao的个人空间 https://blog.eetop.cn/taoyuetao [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

[原创] Linux 下创建同文件名文件

已有 1132 次阅读| 2006-12-22 09:17 |个人分类:【 Linux & GNU 】

天气: 晴朗
心情: 高兴

================================

Author: taoyuetao
Email: tao_yuetao@yahoo.com.cn
Blog: http://www.eetop.cn/blog/?11145

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,并返回,系统就会提示该文件已经存在

 


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 0

    粉丝
  • 0

    好友
  • 0

    获赞
  • 1075

    评论
  • 4435

    访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-17 02:23 , Processed in 0.026956 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部