首页 > 其他分享 >27_目录IO

27_目录IO

时间:2024-04-08 12:12:14浏览次数:23  
标签:27 return file int fd IO printf include 目录

目录IO

文件 IO 和目录 IO 的对比:

image-20240404155211741

区别:

​ 之前我们学习的文件 IO 和提到过的标准 IO 都是对文件操作, 接下来学习的目录 IO 都是对目录操作。

mkdir

创建目录函数如下表所示:

image-20240404155248246

代码

mkdir.c

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

int main(int argc, char const *argv[])
{
    int ret;

    if(argc != 2)
    {
        printf("Usage: %s <name file>\n", argv[0]);
        return -1;
    }

    ret = mkdir(argv[1], 0666);

    if(ret < 0)
    {
        printf("mkdir is error!!!\n");
        return -2;
    }
    printf("mkdir is ok!!!\n");
    return 0;
}

运行结果

image-20240404160954108

opendir/closedir

image-20240404161041536

代码

mkdir.c

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

int main(int argc, char const *argv[])
{
    int ret;
    DIR *dp;

    dp = opendir(argv[1]);

    if(dp != NULL)
    {
        printf("opendir is ok!!!\n");
    }
    
    closedir(dp);
    return 0;
}

运行结果

image-20240404161823854

readdir

image-20240404162032234

代码

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

int main(int argc, char const *argv[])
{
    int ret;
    DIR *dp;
    struct dirent *dir;

    dp = opendir(argv[1]);

    if (dp == NULL)
    {
        printf("opendir is error!!!\n");
        return -1;
    }
    printf("opendir is ok!!!\n");

    while (1)
    {
        dir = readdir(dp);
        if (dir != NULL)
        {
            printf("file name is %s\n", dir->d_name);
        }else
        {
            break;
        }
        
    }

    closedir(dp);

    return 0;
}

运行结果

image-20240404163500779

综合练习

需求:

​ 1.打印我们要拷贝的目录下的所有文件名, 并拷贝我们需要的文件。
​ 2.通过键盘输入我们要拷贝的文件的路径和文件名等信息

代码

practice.c

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

int main(int argc, char const *argv[])
{
    DIR *dir;
    struct dirent *rdir;
    int fd_src, fd_obj;
    ssize_t ret;
    char buf[100] = {0};
    char file_path[32]={0};
    char file_name[32]={0};

    printf("please enter the file path:\n");
    scanf("%s", file_path);

    dir = opendir(file_path);
    if (dir == NULL)
    {
        printf("opendir is error!!!\n");
        return -2;
    }
    printf("opendir is ok!!!\n");
    while (1)
    {
        rdir = readdir(dir);
        if (rdir != NULL)
        {
            printf("filename: %s\n", rdir->d_name);
        }
        else
        {
            break;
        }
    }

    printf("please enter the file name:\n");
    scanf("%s", file_name);

    fd_src = open(strcat(strcat(file_path, "/"), file_name), O_RDONLY);
    fd_obj = open(file_name, O_CREAT | O_WRONLY, 0666);

    if (fd_src < 0 || fd_obj < 0)
    {
        printf("open is error!!!\n");
        return -3;
    }

    while ((ret = read(fd_src, buf, 32)) != 0)
    {
        write(fd_obj, buf, ret);
    }

    close(fd_obj);
    close(fd_src);
    closedir(dir);

    return 0;
}

运行结果

image-20240404183857209

标签:27,return,file,int,fd,IO,printf,include,目录
From: https://www.cnblogs.com/mzx233/p/18120847

相关文章

  • 26_文件IO
    文件IO文件描述符​ 对于文件IO来说,一切都是围绕文件操作符来进行的。在Linux系统中,所有打开的文件都有一个对应的文件描述符。​ 文件描述符的本质是一个非负整数,当我们打开一个文件时,系统会给我们分配一个文件描述符。​ 当我们对一个文件做读写操作的时候,我们使......
  • 空洞卷积 Dilated Convolution
    空洞卷积DilatedConvolution通常的卷积操作,除了需要指定输入输出通道数,还需要确定卷积核大小kernei_size、步长stride、填充大小padding。Conv1d(384,48,kernel_size=3,stride=1,padding=1)空洞卷积则是在此基础上增加了dilation参数,用于控制卷积核的扩张程度。dil......
  • ubuntu2204 部署 stable-diffusion-webui
    显卡:(一个实例仅能用一张卡)顶配:rtx6000ada48g,a10040g,a100 80g,a100 96g,a80080g,h100,h200高端:rtx409024g,rtx4090D24g,rtxa600048g,rtxa500024g,rtx5000ada32g魔改:rtx2080ti22g,rtx308020g性价比:rtx4060ti16g,rtx206012g,rtx306012g,rtx309024g,rtxtitan24g其......
  • sqlalchemy relationship lazy属性
    'select' (默认):懒加载(LazyLoading):当访问与父对象关联的子对象集合或单个对象属性时,才会触发一次SQL查询,从数据库中获取相关数据。这是最常用的加载策略,因为它延迟了数据的获取,直到真正需要时才执行查询,有助于减少不必要的数据库交互。'joined':连接加载(Joi......
  • KALDI-IO库的生成与读取
    https://blog.csdn.net/nwnu_908/article/details/117354174?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171254323616800184167343%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171254323616800184167343&biz_id=0&a......
  • Visual Studio 2022插件的安装及使用 - 编程手把手系列文章
          这次开始写手把手编程系列文章,刚写到C#的Dll程序集类库的博文,就发现需要先介绍VisualStudio2022的插件的安装及使用,因为在后面编码的时候会用到这些个插件,所以有必要先对这个内容进行介绍。      其实笔者使用的VisualStudio2022的插件不多,因为有些插件......
  • WebSocket manager.js:115 GET http://IP:8000/socket.io/?EIO=4&transport=polling&t
    前言全局说明WebSocket报错net::ERR_CONNECTION_TIMED_OUT一、问题:WebSocket报错net::ERR_CONNECTION_TIMED_OUT二、原因:可能和后端的服务链接不上导致的三、解决方法:重启启动后端服务免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后......
  • springboot与springcloud版本关系,BeanCreationException Error creating bean with n
    添加注解@EnableFeignClients后报错:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'configurationPropertiesBeans'definedinclasspathresource[org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebi......
  • 【mac权限】解决 mac 运行报错 150: Operation not permitted
    Couldnotsetenvironment:150:OperationnotpermittedwhileSystemIntegrityProtectionisengagedMac下操作文件,遇到Operationnotpermitted原来是索引服务被关闭,导致对文件夹的操作权限失效解决步骤打开系统偏好设置,隐私与安全性,左侧选择‘文件和文件夹’,......
  • 【译】如何在 Visual Studio 中安装 GitHub Copilot
    GitHubCopilot简介GitHubCopilot是一个新工具,可以帮助您在人工智能的帮助下更快,更智能地编写代码。它可以建议代码补全,生成代码片段,甚至为您编写整个函数。GitHubCopilot与各种语言和框架一起工作,它可以从您自己的代码和偏好中学习。下文描述了,如何在VisualStudio中......