IO进程线程第四天(8.1)opendir,closedir,readdir

news2024/9/21 16:25:02

作业1:

从终端获取一个文件的路径以及名字。

若该文件是目录文件,则将该文件下的所有文件的属性显示到终端,类似ls -l该文件夹

若该文件不是目录文件,则显示该文件的属性到终端上,类似ls -l这单个文件

#include<stdio.h>
#include<head.h>
#include<pwd.h>
#include<grp.h>
void get_filePermission(mode_t m)
{
    char b[]="rwx";
    for(int i=0;i<9;i++)
    {
        if((m&(0400>>i))==0)
        {
            putchar('-');
            continue;
        }
        printf("%c",b[i%3]);
    }
    return;
}
void get_fileType(mode_t m)
{
    if(S_ISREG(m))
        putchar('-');
    else if(S_ISDIR(m))
        putchar('d');
    else if(S_ISCHR(m))
        putchar('c');
    else if(S_ISBLK(m))
        putchar('b');
    else if(S_ISFIFO(m))
        putchar('p');
    else if(S_ISLNK(m))
        putchar('l');
    else if(S_ISSOCK(m))
        putchar('s');
}
void file_time(time_t t)
{
    struct tm* info=localtime(&t);
    printf("%d月 %d %d:%d",info->tm_mon+1,info->tm_mday,info->tm_hour,info->tm_min);
}
void file_uid(uid_t uid)
{
    struct passwd* pwd=getpwuid(uid);
    if(NULL==pwd)
    {
        ERR_MSG("getpwuid");
        return ;
    }
    printf("%s ",pwd->pw_name);
}
void file_gid(gid_t gid)
{
    struct group* grp=getgrgid(gid);
    if(NULL==grp)
    {
        ERR_MSG("getgrgid");
        return ;
    }
    printf("%s ",grp->gr_name);
}
void wjqx(mode_t Mode,nlink_t Nlink,uid_t Uid,gid_t Gid,off_t Size,time_t t)
{
    get_fileType(Mode);
    get_filePermission(Mode);
    printf(" %ld ",Nlink);
    file_uid(Uid);
    file_gid(Gid);
    printf("%ld ",Size);
    file_time(t);
    printf("\n");
}
int main(int argc, const char *argv[])
{
    char str[128]="";
    printf("请输入文件路径以及名字:\n");
    scanf("%s",str);
    struct stat buf;
    if(stat(str,&buf)<0)
    {
        ERR_MSG("stat");
        return -1;
    }
    if(S_ISDIR(buf.st_mode))
    {
        DIR *dp=opendir(str);
        if(NULL==dp)
        {
            ERR_MSG("opendir");
            return -1;
        }
        printf("%s目录打开成功\n",str);
        int i=1;
        while(1)
        {
            struct dirent* rp=readdir(dp);
            if(NULL==rp)
            {
                if(0==errno)
                {
                    printf("目录读取完毕\n");
                    break;
                }
                else
                {
                    ERR_MSG("readdir");
                    return -1;
                }
            }
            if((rp->d_name[0])!='.')
            {
                struct stat auf;
                char c[128]="";
                strcat(c,str);
                strcat(c,"/");
                strcat(c,rp->d_name);
                if(stat(c,&auf)<0)
                {
                    ERR_MSG("stat");
                    return -1;
                }
                wjqx(auf.st_mode,auf.st_nlink,auf.st_uid,auf.st_gid,auf.st_size,auf.st_ctime);
                printf("[%d]%s ",i++,rp->d_name);
            }
        }
        if(closedir(dp)<0)
        {
            ERR_MSG("closedir");
            return -1;
        }
        printf("目录关闭成功\n");
    }
    else
        wjqx(buf.st_mode,buf.st_nlink,buf.st_uid,buf.st_gid,buf.st_size,buf.st_ctime);
        return 0;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

文件IO函数实现,拷贝文件。子进程先拷贝后半部分,父进程再拷贝前半部分。允许使用sleep函数。

#include<stdio.h>
#include<head.h>
int main(int argc, const char *argv[])
{
    char a;
    int fd=open("open_dir.c",O_RDONLY);
    if(fd<0)
    {   
        ERR_MSG("open");
        return -1; 
    }   
    int ff=open("2.c",O_RDWR|O_CREAT|O_APPEND,0664);
    if(ff<0)
    {   
        ERR_MSG("open");
        return -1; 
    }   

    pid_t e=fork();
    off_t len=lseek(fd,0,SEEK_END);
    if(0==e)
    {   
        lseek(fd,len/2,SEEK_SET);
        while(1)
        {
            if(read(fd,&a,1)==0)
                break;
            //printf("%c",a);
            write(ff,&a,1);
        }
    }   
    else if(e!=0)
    {
        sleep(1);    
        lseek(fd,0,SEEK_SET);
        lseek(ff,0,SEEK_SET);
        int i=0;
        while(i++<(len/2))
        {
            read(fd,&a,1);
            write(ff,&a,1);
        }
    }
    close(fd);
    close(ff);
    return 0;
}  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/824557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 JavaScript 实现【箱子之形摆放】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例…

【Uniapp 中实现微信登录】

要在 Uniapp 中实现微信登录&#xff0c;需要完成以下步骤&#xff1a; 在微信开放平台注册一个应用&#xff0c;并获取到该应用的 AppID 和 AppSecret。 在 manifest.json 中点击App模块配置。勾选微信登录模块&#xff0c;填入该应用的 AppID 在代码中调用 uni.login 方法&…

学习记录——EGE-UNet、CFNet

EGE-UNet: an Efficient Group Enhanced UNet for skin lesion segmentation 上海交大 2023 MICCAI 基于 U-Net 进行魔改&#xff0c;用于解决医学图像&#xff08;尤其是皮肤病变&#xff09;分割中面临的问题。由于它是针对移动健康应用开发的&#xff0c;解决了当前许多模型…

docker下载镜像慢

下载镜像的方法 手动下载&#xff0c;然后再打开 此方法有局限&#xff0c;因为不是所有的镜像地址都支持http访问。 方法是打开此镜像市场网站&#xff0c;搜索自己想要的镜像&#xff0c;然后点击下载即可。 Linux一般是下载一个压缩包&#xff0c;解压之后docker load就可…

用于医学图像分类的双引导的扩散网络

文章目录 DiffMIC: Dual-Guidance Diffusion Network for Medical Image Classification摘要本文方法实验结果 DiffMIC: Dual-Guidance Diffusion Network for Medical Image Classification 摘要 近年来&#xff0c;扩散概率模型在生成图像建模中表现出了显著的性能&#xf…

【update】自动更新设计小记

前情纪要 老项目的一个更新迭代实例方式处理&#xff0c;从功能梳理&#xff0c;待流程设计,…了解功能&#xff0c;时序图&#xff0c;流程图记录 关系图梳理 流程图设计

ChatGPT及其工作原理;OpenAI申请注册商标GPT-5,引发关注

&#x1f989; AI新闻 &#x1f680; OpenAI申请注册商标GPT-5&#xff0c;引发关注 摘要&#xff1a;OpenAI已在上月18日申请注册商标GPT-5&#xff0c;显示该模型将提供文本生成、自然语言理解、语音转录、翻译、分析等功能。此前OpenAI曾表示尚未开始训练GPT-4的后继者GPT…

Java培训去哪?Java培训普遍花费贵吗?

随着Java开发语言1995年诞生到如今&#xff0c;跨越了20个春夏秋冬&#xff0c;是时下最热的开发语言之一&#xff0c;想要接触了解的人群越来越多。对绝大多数准备学习java这门的学员来讲&#xff0c;Java培训去哪是一个绕不开的问题。接下里笔者就和大家一起探讨一下。 普遍来…

解决有道云笔记自动更新问题 关闭有道云笔记自动更新 有道云笔记自动升级v7.2.8

解决有道云笔记自动更新问题 关闭有道云笔记自动更新 有道云笔记自动升级v7.2.8 一、背景 最近使用有道云笔记时&#xff0c;遇到bug问题&#xff1a; 打不开加密的笔记&#xff0c;发现是最新版本v7.2.8&#xff0c;切换到v7.2.7后&#xff0c;一切恢复正常。 在使用有道云笔…

质量指标如何发挥作用?构建质量能力是关键

本文首发于个人网站「BY林子」&#xff0c;转载请参考版权声明。 各个团队的质量管理不够规范&#xff0c;想要一套质量指标对其进行规范化的考核。 指标&#xff0c;总是受到管理者们的青睐&#xff0c;甚至有人绞尽脑汁研究出各种指标的计算方式&#xff0c;似乎利用指标来进…

windows创建不同大小的文件命令

打开命令窗口&#xff08;windowsR输入cmd打开&#xff09; 输入&#xff1a;fsutil file createnew C:\Users\Desktop\fileTran\10M.txt 10240000&#xff0c;创建10M大小的文件。 文件若存在需要先删除。

基于jsp的企业员工信息管理系统的设计与实现--【毕业论文】

文章目录 本系列校训毕设的技术铺垫文章主体层次摘要示例摘要的写法英文摘要&#xff1a; 选题目的和意义&#xff1a;与本课题相关的技术和方法综述&#xff1a;系统分析经济上的可行性技术上的可行性开发结构分析系统功能需求系统模型 系统概要设计&#xff1a;数据库设计系统…

python 异步Web框架sanic

我们继续学习Python异步编程&#xff0c;这里将介绍异步Web框架sanic&#xff0c;为什么不是tornado&#xff1f;从框架的易用性来说&#xff0c;Flask要远远比tornado简单&#xff0c;可惜flask不支持异步&#xff0c;而sanic就是类似Flask语法的异步框架。 github&#xff1…

Java并发----进程、线程、并行、并发

一、进程与线程 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行…

车载GPS模块有哪些部分构成?_GPS北斗模块定位原理

GPS模块硬件的常规性硬件有&#xff1a;主板或者电路板、芯片、天线等&#xff0c;这些都是必备的硬件。我们常说的GPS定位模块称为用户部分&#xff0c;它像“收音机”一样接收、解调卫星的广播C/A码信号&#xff0c;中以频率为1575.42MHz。 芯片是GPS模块里面的很重要的一部分…

IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

系列文章目录 IDEA上面书写wordcount的Scala文件具体操作 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 目录 系列文章目录 前言 一 准备工作 1.1 安装Maven 1.1.1 Maven安装配置步骤 1.1.2 解压相关的软件包 1.1.3 Maven 配置环境变量 1.1.4 配…

解决项目加载时空白页面

背景&#xff1a;当前端项目加载时&#xff0c;遇到网络不稳定或更新项目时&#xff0c;出现长时间白屏情况&#xff0c;对用户体验非常不友好。 解决方法 CSN加速增加带宽前端页面修改 本文就第三点展开 index.html页面 &#xff08;public文件夹下&#xff09; <!DOCTYPE…

STM32F4_外部SRAM

目录 前言 1. SRAM控制原理 1.1 SRAM功能框图 1.2 SRAM读写时序 2. FSMC简介 2.1 FSMC架构 2.2 FSMC地址映射 2.3 FSMC控制SRAM时序 3. FSMC结构体 4. 库函数配置FSMC 5. 实验程序 5.1 main.c 5.2 SRAM.c 5.3 SRAM.h 前言 STM32F4自带了192K字节的SRAM&#xff1…

免费logo生成网官网分享,轻松生成专属logo

如果你正在寻找一种快速、廉价的方式来创建一个专业的商标&#xff0c;那么免费的logo生成器可能是你想要的。这些生成器可以帮助你在几分钟内创建一个标志&#xff0c;而无需花费大量的时间和金钱。 有些小伙伴会说自己没有设计的经验&#xff0c;对于logo设计也没有太多的构思…

如何能够高效实现表格中的分权限编辑功能

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 在表格类填报需求中&#xff0c;根据当前登录用户的不同等级&#xff0c;能填报的区域会…