Linux目录操作函数

Posted 傅耳耳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux目录操作函数相关的知识,希望对你有一定的参考价值。

目录操作函数

1.1 mkdir 函数

打开说明文档

man mkdir # 打开第一章shell命令mkdir的说明
man 2 mkdir # 打开第二章Linux系统函数mkdir的说明
  • 作用:创建一个目录
  • 参数:
    • pathname:创建的目录的路径
    • mode:权限,八进制的数
  • 返回值:成功返回0,失败返回-1
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

int main()

    int ret = mkdir("aaa", 0777);
    // 直接写777,默认是十进制的数
    // 0777 前导0表示八进制数

    if(ret == -1) 
        perror("mkdir");
        return -1;
    

    return 0;

fuerer@fuerer-virtual-machine:~/Linux/lesson14$ gcc mkdir.c -o mkdir
fuerer@fuerer-virtual-machine:~/Linux/lesson14$ rm -rf aaa/
fuerer@fuerer-virtual-machine:~/Linux/lesson14$ ./mkdir
fuerer@fuerer-virtual-machine:~/Linux/lesson14$ ll
总用量 28
drwxrwxr-x  3 fuerer fuerer 4096 324 20:25 ./
drwxrwxr-x 15 fuerer fuerer 4096 324 20:19 ../
drwxrwxr-x  2 fuerer fuerer 4096 324 20:25 aaa/
-rwxrwxr-x  1 fuerer fuerer 8344 324 20:25 mkdir*
-rw-rw-r--  1 fuerer fuerer  570 324 20:25 mkdir.c

注:

  • 指定的权限为0777,但在mkdir 底层会将 mode~umask相与获得最终的权限,最终 aaa 权限为 0775
  • 目录必须有可执行权限 x ,才能进入到该目录下

1.2 rmdir 函数

rmdir 函数只能删除一个空的目录,实际应用价值较小

#include <unistd.h>
int rmdir(const char *pathname);

DESCRIPTION
rmdir() deletes a directory, which must be empty.

1.3 rename 函数

#include <stdio.h>
int rename(const char *oldpath, const char *newpath);

oldpath 目录名 改为 newpath

1.4 chdirgetcwd 函数

#include <unistd.h>
int chdir(const char *path);
  • 作用:要修改进程的工作目录(目标工作目录)
    • 比如在/home/fuerer/ 目录下启动了一个可执行程序a.out,进程的工作目录是/home/fuerer
  • 参数:
    • path:需要修改的工作目录
#include <unistd.h>
char *getcwd(char *buf, size_t size);
  • 作用:获取当前工作目录
  • 参数:
    • buf:存储路径,指向的是一个数组(传出参数)
    • size:数组的大小
  • 返回值:返回的是指向的一块内存,这个数据就是第一个参数

使用示例

#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

int main() 

    // 获取当前的工作目录
    char buf[128];
    getcwd(buf, sizeof(buf));
    printf("当前的工作目录是%s\\n", buf);

    // 修改工作目录
    int ret = chdir("/home/fuerer/Linux/lesson13");
    if(ret == -1) 
        perror("chdir");
        return -1;
    

    // 创建一个新的文件
    // 创建新文件 需要指定权限
    int fd = open("chdir.txt", O_CREAT | O_RDWR, 0664);
    if(fd == -1) 
        perror("open");
        return -1;
    

    close(fd);

    // 再次获取当前工作目录
    char buf1[128];
    getcwd(buf1, sizeof(buf1));
    printf("当前的工作目录是%s\\n", buf1);

    return 0;

原工作目录为 /home/fuerer/Linux/lesson14

修改后工作目录为 /home/fuerer/Linux/lesson13

之后创建新文件 chdir.txt 在修改后工作目录 /home/fuerer/Linux/lesson13

fuerer@fuerer-virtual-machine:~/Linux/lesson14$ gcc chdir.c -o chdir
fuerer@fuerer-virtual-machine:~/Linux/lesson14$ ./chdir
当前的工作目录是/home/fuerer/Linux/lesson14
当前的工作目录是/home/fuerer/Linux/lesson13
fuerer@fuerer-virtual-machine:~/Linux/lesson14$ ls
bbb  chdir  chdir.c  mkdir  mkdir.c  rename  rename.c
fuerer@fuerer-virtual-machine:~/Linux/lesson14$ cd ../lesson13/
fuerer@fuerer-virtual-machine:~/Linux/lesson13$ ls
access  access.c  b.txt  chdir.txt  chmod  chmod.c  truncate  truncate.c
fuerer@fuerer-virtual-machine:~/Linux/lesson13$ 

以上是关于Linux目录操作函数的主要内容,如果未能解决你的问题,请参考以下文章

Linux C中文函数手册之 目录操作函数

Linux目录操作函数

Linux目录操作函数

C++笔记--Linux编程-linux文件和输入输出 文件和目录操作

Linux目录操作相关函数

(2.8)文件和目录操作——Linux文件权限管理