IO进程线程 day4 文件IO与目录操作

 1.使用标准IO完成两个文件拷贝

#include <head.h>
int main(int argc, const char *argv[])
{//判断输入是否合法if(argc>3){printf("输入不合法\n");return -1;}//定义两个文件指针,用于读写FILE *fp1=NULL;FILE *fp2=NULL;if((fp1=fopen(argv[1],"r"))==NULL){perror("");return -1;}if((fp2=fopen(argv[2],"w"))==NULL){perror("");return -1;}//循环读取搬运while(1){char buf[20];//定义搬运工int res=fread(buf,1,sizeof(buf),fp1);//循环读取字符fwrite(buf,1,res,fp2);//将字符拷贝到第二个文件中if(feof(fp1))//执行上述操作后,判断光标位置{break;//如果光标在结尾则退出循环}}//关闭两个文件fclose(fp1);fclose(fp2);return 0;
}
ubuntu@ubuntu:day3$ ls
04write.c  homework1.c  stat.c  test1.c
ubuntu@ubuntu:day3$ gcc homework1.c 
ubuntu@ubuntu:day3$ ./a.out test1.c test2.c
ubuntu@ubuntu:day3$ ls
04write.c  a.out  homework1.c  stat.c  test1.c  test2.c
ubuntu@ubuntu:day3$ 

2.使用文件IO完成两个文件的拷贝

#include <head.h>int main(int argc, const char *argv[])
{//判断传入的文件个数if(argc != 3){printf("input file error\n");printf("usage:./a.out srcfile dstfile\n");return -1;}//定义文件描述符变量int srcfd, dstfd;//以只读的形式打开源文件if((srcfd = open(argv[1], O_RDONLY)) ==-1){perror("open srcfile error");return -1;}//以只写的形式打开目标文件if((dstfd = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0664)) ==-1){perror("open dstfile error");return -1;}//不断将源文件中的内容读出,写入的目标文件中//直到源文件全部读取结束char buf[128] = "";while(1){memset(buf, 0, sizeof(buf));    //将容器清空int res = read(srcfd, buf, sizeof(buf));   //从源文件中读取数据write(dstfd, buf, res);     //将数据写入目标文件//对读取的数据个数进行判断if(res == 0){break;}}//关闭两个文件close(srcfd);close(dstfd);printf("拷贝成功\n");return 0;
}
ubuntu@ubuntu:day3$ gcc homework2.c
ubuntu@ubuntu:day3$ ./a.out test2.c test3.c
拷贝成功
ubuntu@ubuntu:day3$ diff test2.c test3.c
ubuntu@ubuntu:day3$ 

3.实现stat函数

#include <head.h>int main(int argc, const char *argv[])
{//定义文件属性类型的数据struct stat sx;      //用于存储获得的文件属性//调用函数的到文件属性stat(argv[1], &sx);switch(sx.st_mode&S_IFMT){case S_IFSOCK:{printf("套接字文件\t");}break;case S_IFLNK:{printf("链接文件\t");}break;case S_IFREG:{printf("普通文件\t");}break;case S_IFBLK:{printf("块设备文件\t");}break;case S_IFDIR:{printf("目录文件\t");}break;case S_IFCHR:{printf("字符设备文件\t");}break;case S_IFIFO:{printf("管道文件\t");}break;}printf("%#o\t%ld\t%ld\n", sx.st_mode&0777, sx.st_size, sx.st_ino);return 0;
}
ubuntu@ubuntu:day3$ gcc homework3.c
ubuntu@ubuntu:day3$ ./a.out test2.c
普通文件	0664	6	667814
ubuntu@ubuntu:day3$ 

4.实现目录操作

#include <head.h>int main(int argc, const char *argv[])
{//判断外部传参个数if(argc != 2){printf("input error\n");printf("usage:./a.out name\n");return -1;}//定义目录指针DIR *dp = NULL;//打开目录if((dp = opendir(argv[1])) == NULL){perror("opendir error");return -1;}//读取目录中的文件或目录信息struct dirent *sdp = NULL;while((sdp = readdir(dp)) != NULL){//输出当前文件或目录的信息printf("inode:%10ld, size:%10d, %10s, ",\sdp->d_ino, sdp->d_reclen, sdp->d_name);//输出类型switch(sdp->d_type){case DT_BLK:{printf("b\n");}break;case DT_CHR:{printf("c\n");}break;case DT_DIR:{printf("d\n");}break;case DT_FIFO:{printf("p\n");}break;case DT_LNK:{printf("l\n");}break;case DT_REG:{printf("-\n");}break;case DT_SOCK:{printf("s\n");}break;}}//关闭目录closedir(dp);return 0;
}
ubuntu@ubuntu:day3$ gcc homework4.c
ubuntu@ubuntu:day3$ ./a.out .
inode:    655425, size:        24,         .., d
inode:    667813, size:        32, homework4.c, -
inode:    667819, size:        32, homework3.c, -
inode:    667822, size:        32,      a.out, -
inode:    667818, size:        32, homework2.c, -
inode:    667816, size:        32, homework1.c, -
inode:    667815, size:        32,    test1.c, -
inode:    667812, size:        32,     stat.c, -
inode:    667808, size:        24,          ., d
inode:    667814, size:        32,    test2.c, -
inode:    667811, size:        32,  04write.c, -
inode:    667817, size:        32,    test3.c, -
ubuntu@ubuntu:day3$ 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何评估 RAG 应用的质量?最典型的方法论和评估工具都在这里了

随着 LLM(Large Language Model)的应用逐渐普及&#xff0c;人们对 RAG(Retrieval Augmented Generation)场景的关注也越来越多。然而&#xff0c;如何定量评估 RAG 应用的质量一直以来都是一个前沿课题。 很显然&#xff0c;简单的几个例子的对比&#xff0c;并不能准确地衡量…

【操作系统xv6】学习记录--实验1 Lab: Xv6 and Unix utilities--未完

ref:https://pdos.csail.mit.edu/6.828/2020/xv6.html 实验&#xff1a;Lab: Xv6 and Unix utilities 环境搭建 实验环境搭建&#xff1a;https://blog.csdn.net/qq_45512097/article/details/126741793 搭建了1天&#xff0c;大家自求多福吧&#xff0c;哎。~搞环境真是折磨…

金和OA C6 UploadFileEditorSave.aspx 文件上传漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

实现最高效的数据转换:深入了解Achronix JESD204C解决方案

作者&#xff1a;Manish Sinha&#xff0c;Achronix战略规划与业务发展部 长期以来&#xff0c;Achronix为不同行业的数据密集型和高带宽应用提供了创新性的FPGA产品和技术&#xff0c;并帮助客户不断打破性能极限。其中一些应用需要与先进的模拟/数字转换器&#xff08;ADC&a…

UI自动化测试框架搭建

今天给大家分享一个seleniumtestngmavenant的UI自动化&#xff0c;可以用于功能测试&#xff0c;也可按复杂的业务流程编写测试用例&#xff0c;今天此篇文章不过多讲解如何实现CI/CD&#xff0c;只讲解自己能独立搭建UI框架&#xff0c;需要阅读者有一定的java语言基础&#x…

【力扣100】46.全排列

添加链接描述 class Solution:def permute(self, nums: List[int]) -> List[List[int]]:# 思路是使用回溯if not nums:return []def dfs(path,depth,visited,res):# 出递归的条件是当当前的深度已经和nums的长度一样了&#xff0c;把path加入数组&#xff0c;然后出递归if …

Java 将Excel转换为TXT文本格式

TXT文件是一种非常简单、通用且易于处理的文本格式。在处理大规模数据时&#xff0c;将Excel转为TXT纯文本文件可以提高处理效率。此外&#xff0c;许多编程语言和数据处理工具都有内置的函数和库来读取和处理TXT文件&#xff0c;因此将Excel文件转换为TXT还可以简化数据导入过…

【网络技术】【Kali Linux】Wireshark嗅探(四)域名系统(DNS)

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解域名系统&#xff08;DNS&#xff09;的工作原理。 二、域名系统概述 简单来说&#xff0c;域名系统&#xff08;Domain Name System, DNS&#xff09;将域名&#xff08;可以理解为“网址”…

小肥柴慢慢手写数据结构(C篇)(5-2 AVL树)

小肥柴慢慢学习数据结构笔记&#xff08;C篇&#xff09;&#xff08;5-2 AVL树 目录5-5 AVL出现的原因5-5-1 平衡树5-5-2 平衡二叉树的具体案例 5-6 AVL平衡策略的讨论5-7 不使用平衡因子的实现&#xff08;黑皮书&#xff0c;训练思维&#xff09;5-8 使用平衡因子的实现&…

java的mybatis

一.spring 整合单元测试 二.lombok 三.注解方式开发 四.xml 方式开发 五.动态sql

STL-string

目录 &#x1f4a1;介绍 &#x1f4a1;string的基本操作 &#x1f4a1;string的构造函数 &#x1f4a1;string赋值操作 &#x1f4a1;string字符串拼接 &#x1f4a1;string的查找和替换 &#x1f4a1;string字符串比较 &#x1f4a1;string字符存取 &#x1f4a1;str…

Qt6.5类库详解:QFontComboBox

哈喽大家好&#xff0c;欢迎关注公众号(20YC编程)&#xff0c;有免费视频课程哦&#xff01; -今日内容- 1 QFontComboBox介绍 QFontComboBox是Qt框架中的一个字体选择类&#xff0c;它提供了一个下拉列表框&#xff0c;用于选择字体。 QFontComboBox的主要功能和特点&#x…