0508_IO3

练习1:

1:使用 dup2 实现错误日志功能 使用 write 和 read 实现文件的拷贝功能,注意,代码中所有函数后面,紧跟perror输出错误信息,要求这些错误信息重定向到错误日志 err.txt 中去

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <sys/types.h>
  5 #include <unistd.h>
  6 #include <sys/stat.h>
  7 #include <fcntl.h>
  8 #include <pthread.h>
  9 #include <semaphore.h>
 10 #include <wait.h>
 11 #include <signal.h>
 12 #include <sys/socket.h>
 13 #include <arpa/inet.h>
 14 #include <sys/socket.h>
 15 #include <sys/ipc.h>
 16 #include <sys/sem.h>
 17 #include <semaphore.h>
 18 #include <sys/msg.h>
 19 #include <sys/shm.h>
 20 #include <sys/un.h>
 21 int main(int argc, const char *argv[])
 22 {
 23     int errfd=open("./err.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
 24     if(errfd==-1)
 25     {
 26         perror("no open err.txt");
 27         return -1;
 28     }
 29     if(dup2(errfd,2)==-1)
 30     {
 31         perror("dup2 error");
 32         close(errfd);
 33         return -1;
 34     }
 35     close(errfd);
 36     int rfd=open(argv[1],O_RDONLY);
 37     if(rfd==-1)
 38     {
 39         perror("no open argv[1]");
 40         return -1;
 41     }
 42     int wfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0666);
 43     if(wfd==-1)
 44     {
 45         perror("no open argv[2]");
 46         return -1;
 47     }
 48     char str[100]={0};
 49     int a=0;
 50     while((a=read(rfd,str,100)))
 51     {
 52         if(a==-1)
 53         {
 54             perror("read error");
 55             break;
 56         }
 57         if(write(wfd,str,a)==-1)
 58         {
 59             perror("write error");
 60             break;
 61         }
 62     }
 63     if(close(rfd)==-1)
 64     {
 65         perror("close rfd error");
 66         return -1;
 67     }
 68     if(close(wfd)==-1)
 69     {
 70         perror("close wfd error");
 71         return -1;
 72     }
 73     return 0;
 74 }                                                                                                                                                                                                                                                                                                             
~                                                                                                                                             

练习2: 

 2:判断一个文件是否拥有用户可写权限,如果拥有,则去除用户可写权限,如果不拥有,则加上用户可写权限权限更改函数:就是chmod函数,自己去man一下要求每一次权限更改成功之后,立刻在终端显示当前文件的权限信息 :使用 ls -l显示(使用 system函数配合shell指令 ls -l 来实现)

 

  5 #include <unistd.h>
  6 #include <sys/stat.h>
  7 #include <fcntl.h>
  8 #include <pthread.h>
  9 #include <semaphore.h>
 10 #include <wait.h>
 11 #include <signal.h>
 12 #include <sys/socket.h>
 13 #include <arpa/inet.h>
 14 #include <sys/socket.h>
 15 #include <sys/ipc.h>
 16 #include <sys/sem.h>
 17 #include <semaphore.h>
 18 #include <sys/msg.h>
 19 #include <sys/shm.h>
 20 #include <sys/un.h>
 21 int main(int argc, const char *argv[])
 22 {
 23     int file_exist=access(argv[1],F_OK);
 24     if(file_exist==EOF)
 25     {
 26         perror("file no exist");
 27         return -1;
 28     }
 29     struct stat buf={0};
 30     if(stat(argv[1],&buf)==EOF)
 31     {
 32         perror("stat error");
 33         return -1;
 34     }
 35     mode_t mode=buf.st_mode;
 36     if((mode|S_IWUSR)==mode)
 37     {
 38         if(chmod(argv[1],(mode &~S_IWUSR))==EOF)
 39         {
 40             perror("chmod error");
 41             return -1;
 42         }
 43     }
 44     else
 45     {
 46         if(chmod(argv[1],(mode|S_IWUSR))==EOF)
 47         {
 48             perror("chmod error");
 49             return -1;
 50         }
 51     }                                                                     
 52     char str[200]={0};
 53     snprintf(str,200,"ls -l %s",argv[1]);
 54     system(str);
 55     return 0;
 56 }
~                                                                             
~                                                                             
~                                                                             

思维导图: 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化训练第一天(matplotlib直线;散点图,随机漫步)

前言 本人自己的练习记录&#xff1b;如有错误请指正&#xff1b; https://matplotlib.org/stable/gallery/lines_bars_and_markers/index.html 官方有许多例子&#xff0c;可以找到自己需要的图像模仿进行绘制 1.一个简单的直线例子 就如同我们学习C语言的第一个helloword时…

中间件的使用

中间件是全局使用 工厂函数定义中间件 middleware.py # 工厂函数的中间件 def simple_middleware(get_response):def middleware(request):print("在视图函数处理之前执行、、、、、")response get_response(request)print("在视图函数处理之后执行。。。。…

JavaSE——方法详解

1. 方法的概念 方法就是一个代码片段 . 类似于 C 语言中的 " 函数 " 。 方法存在的意义 : 1. 是能够模块化的组织代码(当代码规模比较复杂的时候). 2. 做到代码被重复使用, 一份代码可以在多个位置使用. 3. 让代码更好理解更简单. 4. 直接调用现有方法开发, 不…

YOLOv8训练流程-原理解析[目标检测理论篇]

关于YOLOv8的主干网络在YOLOv8网络结构介绍-CSDN博客介绍了&#xff0c;为了更好地学习本章内容&#xff0c;建议先去看预测流程的原理分析YOLOv8原理解析[目标检测理论篇]-CSDN博客&#xff0c;再次把YOLOv8网络结构图放在这里&#xff0c;方便随时查看。 ​ 1.前言 YOLOv8训练…

分布式光纤测温DTS的测温范围是多少?

分布式光纤测温DTS的测温范围不仅仅取决于光缆的感温能力&#xff0c;还受到多种复杂因素的影响。尽管高温光缆可以耐高温&#xff0c;低温光缆可以耐低温&#xff0c;甚至镀金光缆能够耐受高达700摄氏度的极高温度&#xff0c;然而&#xff0c;这些因素并不能完全解释测温范围…

平航杯复现

简单介绍及前期操作 esxi镜像挂载是一个新的创新点 就根据官方的wp进行挂载就可以了&#xff0c;后面差不多常规的服务器取证操作&#xff0c;然后服务器和计算机&#xff0c;u盘取证都有点联系&#xff0c;还是需要队友配合好一点 配置网段我的建议是把本机的配置改一下&am…

[windows系统安装/重装系统][step-1]U盘启动盘制作,微软官方纯净系统镜像下载

前言 U盘至少8GB吧我这刚好有个空闲的U盘8GB容量&#xff0c;制作启动盘且放入一个最新win10官方镜像足够 不是天天装系统&#xff0c;至少USB2.0 (我用的2.0的一个闲置U盘)即可&#xff0c;当然平时传资料什么的3.0会快些 U盘启动盘仅需要制作一次&#xff0c; U盘启动盘制…

python能够干什么?

python有哪些用途&#xff1f; Python是一种高级编程语言&#xff0c;它被广泛用于各种不同的领域。以下是Python的一些常见用途&#xff1a; 网络应用开发&#xff1a;Python可以用于编写Web应用程序、API、爬虫、网络服务器等。数据科学和机器学习&#xff1a;Python拥有许…

《intel开发手册卷1》学习笔记1

1、操作模式 IA-32架构支持三种基本操作模式:保护模式、实地址模式和系统管理模式。操作模式决定了哪些指令和体系结构功能是可访问的: 1&#xff09;保护模式&#xff1a;该模式是处理器的自然状态。保护模式的功能之一是能够在受保护的多任务环境中直接执行“实地址模式”80…

flask和django的对比

文章目录 1. 简介2. 安装和设置3. 路由和视图4. ORM5. 管理界面6. 社区和文档7. 性能结论 当涉及构建 Web 应用程序时&#xff0c;Flask 和 Django 是两个最受欢迎的 Python Web 框架之一。它们都提供了强大的工具和功能&#xff0c;但在某些方面却有所不同。本文将对 Flask 和…

链表的经典面试题(数据结构详解)+顺序表和链表之间区别+计算机存储体系

前言 首先这里已经正式步入数据结构的知识&#xff0c;之前我们已经讲解了链表的使用&#xff0c;接下来我们需要的就是大量的练习&#xff0c;熟练掌握数据结构。下面的题型我们选择的都是链表的经典题型&#xff0c;面试题型&#xff0c;包含快慢指针&#xff0c;数形结合&am…

Isaac Sim 3(学习笔记5.8)

Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如&#xff1a;v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…

gocator导出图片

想用3D扫描后的图片&#xff0c;但是系统自带的导出方法很麻烦&#xff0c;所以考虑通过sdk导出 首先需要设置点云亮度 这里是导出图片的关键代码 case GoDataMessageType.SurfaceIntensity: { Debug.WriteLine("SurfaceIntensity "); GoSu…

AI换脸原理(2)——人脸检测参考文献S3FD:源码解析

1 介绍 S3FD是一个实时人脸检测器,这篇论文的主要思想是试图解决一个常见的问题,即基于anchor(锚点)的检测器随着人脸变小而急剧恶化。 基于锚点的目标检测方法是通过对一系列预设锚点进行分类和回归来检测目标的,这些锚点是通过在图像上有规律地平铺一组不同尺度和宽高比…

凡尔码安全巡检卡替代传统纸质记录卡

建筑行业、物业管理、医院等行业的安全巡检的记录方式通常以&#xff1a;1、纸质记录&#xff1a;巡检人员使用纸质巡检表格&#xff0c;手动填写巡检时间、巡检区域、巡检发现的问题以及处理情况。这种方式简单直接&#xff0c;但可能存在信息记录不完整、易丢失等问题。 2、电…

rust打包编译为mac或者linux可执行文件,发送到别的电脑不能运行

如果使用rust项目编译为linux或者mac可执行文件&#xff0c;发送到别的电脑之后&#xff0c;不可以直接运行&#xff0c;而是显示一个空白文件&#xff0c;双击也没有反应&#xff0c;其实这是因为这个文件没有可执行权限导致的&#xff0c;添加可执行权限就可以了&#xff1a;…

用户至上!探索7种常用的用户体验研究方法

用户体验研究是产品开放过程中的重要组成部分&#xff0c;优秀的产品设计与高质量的用户体验是不可分割的。对于产品开发&#xff0c;选择合适的用户体验研究方法在很大程度上决定了产品的使用效果。本文全面阐述了用户体验研究、用户体验研究的重要性和用户体验研究方法&#…

Linux进程间通信:system V共享内存

目录 一、什么是共享内存 1.1创建共享内存 1.2释放共享内存 1.2.1shmctl 1.2.2shmat 1.2.3 shmdt 二、共享内存的实现及使用 2.1ShmClient 2.2Shm_Server 2.3Fifo.hpp 2.4Comm.hpp 一、什么是共享内存 标准系统V也叫system V的本地通信方式一般有三种&#xff1a; …

行业新应用:电机驱动将成为机器人的动力核心

电机已经遍布当今社会人们生活的方方面面&#xff0c;不仅应用范围越来越广&#xff0c;更新换代的速度也日益加快。按照工作电源分类&#xff0c;可以将它划分为直流电机和交流电机两大类型。直流电机中&#xff0c;按照线圈类型分类&#xff0c;又可以分为有铁芯的电机、空心…

Redis 哨兵机制

文章目录 哨兵机制概念相关知识铺垫主从复制缺陷哨兵工作流程选举具体流程理解注意事项 哨兵机制概念 先抽象的理解&#xff0c;哨兵就像是监工&#xff0c;节点不干活了&#xff0c;就要有行动了。 Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#…