c语言 mkdir函数
时间: 2023-11-30 17:02:25 浏览: 152
C语言中的mkdir函数用于创建一个新的目录。它的函数原型如下:
```c
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
```
其中,`pathname`是要创建的目录路径名,`mode`是设置目录的访问权限。返回值为0表示成功创建目录,返回-1表示失败。
以下是一个示例代码:
```c
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
int main() {
const char *path = "/path/to/new_directory";
int res = mkdir(path, 0777); // 设置权限为777
if (res == -1) {
perror("Error creating directory");
return errno;
}
printf("Directory created successfully\n");
return 0;
}
```
在上面的示例中,我们使用mkdir函数创建了一个名为new_directory的目录。如果创建失败,我们使用perror函数打印错误信息。
请注意,为了使用mkdir函数,你需要包含头文件`<sys/stat.h>`。并且根据需要设置合适的访问权限。
相关问题
C语言mkdir在当前文件夹下创建文件夹
在C语言中,可以通过使用头文件`<sys/stat.h>`中的`mkdir()`函数来创建一个新的文件夹。下面是一个简单的示例代码,用于在当前工作目录下创建一个名为“new_folder”的文件夹:
```c
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
int main() {
int status;
status = mkdir("new_folder", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if(status == 0) {
printf("Folder created successfully\n");
}
else {
printf("Unable to create folder\n");
}
return 0;
}
```
在上面的代码中,`mkdir()`函数的第一个参数是要创建的文件夹的名称("new_folder")。第二个参数是文件夹的权限,此处设置为可读、可写、可执行的用户权限、组权限和其他用户权限。如果`mkdir()`函数成功创建了文件夹,则会返回0,否则将返回-1。
安卓10中的app如何使用c语言mkdir创建/sdcard/Android/data/com.xxxxx目录
在Android 10中,应用程序需要请求MANAGE_EXTERNAL_STORAGE权限才能创建公共存储目录。同时,由于安全原因,应用程序无法直接访问/sdcard/目录,因此需要使用getExternalFilesDir()方法获取应用程序私有目录的路径。
以下是使用C语言在Android 10中创建/sdcard/Android/data/com.xxxxx目录的步骤:
1. 在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
```
2. 在应用程序中请求MANAGE_EXTERNAL_STORAGE权限:
```
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 1);
```
3. 获取应用程序私有目录的路径:
```
char* privateDirPath = NULL;
JNIEnv* env = NULL;
JavaVM* vm = NULL;
jint result = (*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6);
if (result != JNI_OK) {
result = (*vm)->AttachCurrentThread(vm, &env, NULL);
if (result != JNI_OK) {
return NULL;
}
}
jobject context = getCurrentContext(env);
jclass contextClass = (*env)->GetObjectClass(env, context);
jmethodID getExternalFilesDirMethod = (*env)->GetMethodID(env, contextClass, "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;");
jstring type = (*env)->NewStringUTF(env, NULL);
jobject file = (*env)->CallObjectMethod(env, context, getExternalFilesDirMethod, type);
const char* fileStr = (*env)->GetStringUTFChars(env, file, 0);
privateDirPath = strdup(fileStr);
(*env)->ReleaseStringUTFChars(env, file, fileStr);
(*vm)->DetachCurrentThread(vm);
```
4. 使用mkdir()函数创建目录:
```
char* dirPath = "/sdcard/Android/data/com.xxxxx";
strcat(privateDirPath, dirPath);
int result = mkdir(privateDirPath, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if (result == -1) {
// 创建目录失败
}
```
注意:如果应用程序没有MANAGE_EXTERNAL_STORAGE权限,则会在运行时抛出SecurityException异常。
阅读全文