c语言是如何实现mkdir()的

qihjn 2011-09-13 12:34:53
这个函数是创建目录的,能不能看到他的源码实现。

很奇怪,这个函数难道调用系统的 mkdir命令?

操作系统不是由c语言写的吗,那应该c语言有实现这个功能基本实现。
...全文
1435 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
大道曙光 2011-09-14
  • 打赏
  • 举报
回复
看看linux下这个函数的源代码
hongwenjun 2011-09-13
  • 打赏
  • 举报
回复
mkdir /?
创建目录。

MKDIR [drive:]path
MD [drive:]path

如果命令扩展名被启用,MKDIR 会如下改变:

如果需要,MKDIR 会在路径中创建中级目录。例如: 假设 \a 不
存在,那么:

mkdir \a\b\c\d

与:

mkdir \a
chdir \a
mkdir b
chdir b
mkdir c
chdir c
mkdir d

相同。如果扩展名被停用,则需要键入 mkdir \a\b\c\d。
qq120848369 2011-09-13
  • 打赏
  • 举报
回复
额,windows也叫mkdir。
hongwenjun 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xin_wu_hen 的回复:]

C:\Program Files\Microsoft Visual Studio 8\VC\crt\src也就是你vs安装目录的该路径下有mkdir.c源代码文件的。
[/Quote]

/***
*mkdir.c - make directory
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* Defines function _mkdir() - make a directory
*
*******************************************************************************/

#include <cruntime.h>
#include <oscalls.h>
#include <internal.h>
#include <direct.h>
#include <tchar.h>

/***
*int _mkdir(path) - make a directory
*
*Purpose:
* creates a new directory with the specified name
*
*Entry:
* _TSCHAR *path - name of new directory
*
*Exit:
* returns 0 if successful
* returns -1 and sets errno if unsuccessful
*
*Exceptions:
*
*******************************************************************************/

int __cdecl _tmkdir (
const _TSCHAR *path
)
{
ULONG dosretval;

/* ask OS to create directory */

if (!CreateDirectory((LPTSTR)path, (LPSECURITY_ATTRIBUTES)NULL))
dosretval = GetLastError();
else
dosretval = 0;

if (dosretval) {
/* error occured -- map error code and return */
_dosmaperr(dosretval);
return -1;
}

return 0;
}


CRT 也是调用系统API的
CreateDirectory((LPTSTR)

所以是先又鸡,还是先有蛋的问题

汇编实现了C, C开放了系统内核
C 使用系统内核,实现了 CRT,
使用CRT 再去实现新的 系统内核
hongwenjun 2011-09-13
  • 打赏
  • 举报
回复
操作系统不是由c语言写的吗,那应该c语言有实现这个功能基本实现。

这句是病句吧, C语言标准只规定 语法,没有规定 怎么去实现 I/O
xin_wu_hen 2011-09-13
  • 打赏
  • 举报
回复
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src也就是你vs安装目录的该路径下有mkdir.c源代码文件的。
xunxun 2011-09-13
  • 打赏
  • 举报
回复
反正就是使用的系统api
辰岡墨竹 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 qihjn 的回复:]
这个函数是创建目录的,能不能看到他的源码实现。

很奇怪,这个函数难道调用系统的 mkdir命令?

操作系统不是由c语言写的吗,那应该c语言有实现这个功能基本实现。
[/Quote]
没有,操作系统的确是用C写的。但是C语言标准库没有创建目录的函数。因为C语言是以可移植性为目的设计的,所以没有那些和系统实现紧密联系的东西。
具体系统的API,比如Windows的CreateDirectory,内部是对文件系统结构进行修改实现的,这些部分的确代码是C语言写的,但是自己实现的。
不同的文件系统创建目录的方式完全不同,C语言标准库不可能脱离系统给其实现。
ForestDB 2011-09-13
  • 打赏
  • 举报
回复
一般都是调用系统(OS)提供的API,Windows的是CreateDirectory,Linux是syscall mkdir,这些的确也是C写的,具体去看源码(Linux的能看到源码)。
ericming200409 2011-09-13
  • 打赏
  • 举报
回复
程序需要与硬件打交道时,大多需要调用系统api,创建目录或者文件都需要system call
AndyZhang 2011-09-13
  • 打赏
  • 举报
回复
这个就是一些目录操作API函数和文件操作函数吧,具体参见win32API

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧