对目录的操作是在什么标题下_进入根目录的命令

对目录的操作是在什么标题下_进入根目录的命令对目录的操作(opendir),详细介绍了目录的具体功能参数返回值,以及各种举例说明

对目录的操作是在什么标题下_进入根目录的命令"

1.opendir函数(打开目录)

#include <sys/types.h>
#include <dirent.h>

DIR *opendir(const char *name);
功能:打开目录
参数:
    @name:目录名
返回值:成功返回目录指针,失败返回NULL置位错误码

2.readdir函数(读取目录下的内容)

#include <dirent.h>

struct dirent *readdir(DIR *dirp);
功能:读取目录下的内容
参数:
    @dirp:目录的指针
返回值:成功返回dirent结构体指针
        失败返回NULL置位错误码
       struct dirent {
           ino_t          d_ino;       //读取到的文件的inode号
           off_t          d_off;       //无需关注
           unsigned short d_reclen;    //这个结构体的大小
           unsigned char  d_type;      //文件的类型
              DT_BLK      This is a block device.
              DT_CHR      This is a character device.
              DT_DIR      This is a directory.
              DT_FIFO     This is a named pipe (FIFO).
              DT_LNK      This is a symbolic link.
              DT_REG      This is a regular file.
              DT_SOCK     This is a UNIX domain socket.
           char           d_name[256];  //读取到文件的文件名
       };

3closedir函数(关闭目录)

int closedir(DIR *dirp);
功能:关闭目录
参数:
    @dirp:目录指针
返回值:成功返回0,失败返回-1,职位错误码

4目录操作的实例

#include <dirent.h>
#include <head.h>

int main(int argc, const char* argv[])
{
    DIR* dirp;
    struct dirent* dt;
    // 1.校验输入成员的个数
    if (argc != 2) {
        fprintf(stderr, "input error,try again\n");
        fprintf(stderr, "usage:./a.out dirname\n");
        return -1;
    }
    // 2.打开目录
    if ((dirp = opendir(argv[1])) == NULL)
        PRINT_ERR("open dir error");

    // 3.读取目录下的内容
    while ((dt = readdir(dirp)) != NULL) {
        switch (dt->d_type) {
        case DT_BLK:
            printf("这是块设备文件\n");
            break;
        case DT_CHR:
            printf("这是块设备文件\n");
            break;
        case DT_DIR:
            printf("这是目录文件\n");
            break;
        case DT_FIFO:
            printf("这是管道文件文件\n");
            break;
        case DT_LNK:
            printf("这是软连接文件\n");
            break;
        case DT_REG:
            printf("这是普通文件\n");
            break;
        case DT_SOCK:
            printf("这是套接字文件\n");
            break;
        }

        printf("name=%s,ino=%ld,size = %d\n",dt->d_name,dt->d_ino,dt->d_reclen);

    }

    closedir(dirp);
    return 0;
}

5.结合目录操作和stat函数打印某个目录下文件的属性信息

#include <dirent.h>
#include <head.h>
#include <pwd.h>
#include <grp.h>

int main(int argc, const char* argv[])
{
    DIR* dirp;
    struct stat stbuf;
    struct dirent* dt;
    char buf[500];
    // 1.校验输入成员的个数
    if (argc != 2) {
        fprintf(stderr, "input error,try again\n");
        fprintf(stderr, "usage:./a.out dirname\n");
        return -1;
    }
    // 2.打开目录
    if ((dirp = opendir(argv[1])) == NULL)
        PRINT_ERR("open dir error");

    // 3.读取目录下的内容
    while ((dt = readdir(dirp)) != NULL) {
        switch (dt->d_type) {
        case DT_BLK:
            printf("这是块设备文件\n");
            break;
        case DT_CHR:
            printf("这是块设备文件\n");
            break;
        case DT_DIR:
            printf("这是目录文件\n");
            break;
        case DT_FIFO:
            printf("这是管道文件文件\n");
            break;
        case DT_LNK:
            printf("这是软连接文件\n");
            break;
        case DT_REG:
            printf("这是普通文件\n");
            break;
        case DT_SOCK:
            printf("这是套接字文件\n");
            break;
        }
        printf("name=%s,ino=%ld,size = %d\n", dt->d_name, dt->d_ino, dt->d_reclen);

        //在文件名前拼接上文件的路径
        memset(buf,0,sizeof(buf));
        snprintf(buf,sizeof(buf),"%s/%s",argv[1],dt->d_name);

        if (stat(buf, &stbuf))
            PRINT_ERR("get stat error");

        printf("uid = %d,gid = %d,size = %ld,mode = %#o\n", stbuf.st_uid,
            stbuf.st_gid, stbuf.st_size, stbuf.st_mode & 0777);

        printf("usrname = %s,groupname = %s\n",
            getpwuid(stbuf.st_uid)->pw_name,getgrgid(stbuf.st_gid)->gr_name);
    }

    closedir(dirp);
    return 0;
}

6.输入一个文件名和目录,判断这个目录下是否有这个文件

#include <dirent.h>
#include <head.h>
#include <pwd.h>
#include <grp.h>

int main(int argc, const char* argv[])
{
    DIR* dirp;
    struct stat stbuf;
    struct dirent* dt;
    char buf[500];
    // 1.校验输入成员的个数
    if (argc != 3) {
        fprintf(stderr, "input error,try again\n");
        fprintf(stderr, "usage:./a.out filename pathname\n");
        return -1;
    }
    // 2.打开目录
    if ((dirp = opendir(argv[2])) == NULL)
        PRINT_ERR("open dir error");

    // 3.读取目录下的内容
    while ((dt = readdir(dirp)) != NULL) {
        if(!strcmp(argv[1],dt->d_name){
            printf("你查找的文件存在\n");
            return 0;
        }
    
    }
    printf("你查找的文件不存在\n");

    closedir(dirp);
    return 0;
}

今天的文章对目录的操作是在什么标题下_进入根目录的命令分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/69636.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注