【Linux】目录操作函数

本文介绍了Linux中的四个基本目录操作函数:mkdir用于创建目录,rmdir用于删除空目录,rename实现文件或目录重命名,以及chdir和getcwd用于改变工作目录。通过实例展示了这些函数的用法和权限管理要点。

目录操作函数

在这里插入图片描述

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$ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值