文件IO-使用dup2实现错误日志功能及判断文件权限,并终端输出

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
void perror_dup();
int main(int argc, const char *argv[])
{umask(0000);perror_dup("umask");int rfd=open(argv[1],O_RDONLY);if(rfd==-1){perror_dup("ropen");//	return 1;}int wfd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0666);if(wfd==-1){perror_dup("wopen");//	return 1;}
//	int buf[1]={0};文件本身也是字符,int本质只是一段内存,读取的时候是将数据存入到内存中char buf[1]={0};while(1){ssize_t returnval=read(rfd,buf,1);perror_dup("read");if(rfd==-1 || wfd==-1){break;}if(returnval==0){break;}//从普通文件读取时,没有数据读取时返回0write(wfd,buf,1);perror_dup("write");}	close(rfd);perror_dup("rfdclose");close(wfd); perror_dup("wfdclose");return 0;
} 
void perror_dup(char *error)
{int pfd=open("./error.txt",O_APPEND|O_WRONLY);int retval=dup(2);dup2(pfd,2);perror(error);dup2(retval,2);
//	fflush(stderr);close(pfd); 
}

运行结果:
1.输入被拷贝文件及拷贝文件错误日志:

2.拷贝文件错误日志:

3.正确拷贝日志:


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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
int main(int argc, const char *argv[])
{struct stat buf={0};stat(argv[1],&buf);mode_t mode=buf.st_mode;if((mode&S_IWUSR)==S_IWUSR){chmod (argv[1],(mode&(~S_IWUSR)));}else{chmod (argv[1],(mode | S_IWUSR));}system("ls -l");return 0;
}

运行结果:

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

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

相关文章

kubectl_入门_Pod控制器

Pod控制器 在k8s中&#xff0c;按照pod的创建方式可以将其分为两类 自主式pod&#xff1a;k8s直接创建出来的pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建控制器创建的pod&#xff1a;通过控制器创建的pod&#xff0c;这种pod删除了之后还会自动重建 1. 什么…

一张贴纸50万,炒房炒币的怎么都来炒CSGO皮肤了

一张贴纸50万&#xff0c;为什么炒房炒币的都来炒CSGO饰品了&#xff1f; 一张贴纸50万&#xff0c;炒房炒币的怎么都来炒CSGO皮肤了&#xff1f; 经常有人问我&#xff0c;天天看你们买卖装备&#xff0c;买卖皮肤&#xff0c;说到底这都是虚拟产品&#xff0c;看得见摸不着的…

Java_从入门到JavaEE_11

一、抽象类及抽象方法 1.认识抽象类及抽象方法 应用场景&#xff1a;当一个方法必须在父类中出现&#xff0c;但是这个方法又不好实现&#xff0c;就把该方法变成抽象方法&#xff0c;交给非抽象的子类去实现 实例&#xff1a; //抽象类 public abstract class 类名{//抽象方…

element-ui table sortable排序 掉后端接口方式

实例: 官方解释:如果需要后端排序&#xff0c;需将sortable设置为custom&#xff0c;同时在 Table 上监听sort-change事件&#xff0c;在事件回调中可以获取当前排序的字段名和排序顺序&#xff0c;从而向接口请求排序后的表格数据。 1.table上要加 sort-change"sortCha…

鸿蒙OpenHarmony开发板:【子系统配置规则】

子系统 子系统配置规则 通过build仓下的subsystem_config.json可以查看所有子系统的配置规则。 {"arkui": {"path": "foundation/arkui", # 路径"name": "arkui" # 子系统名},"ai": {&q…

【Keil程序大小】Keil编译结果Code-RO-RW-ZI分析

【Keil程序大小】Keil编译结果Code-RO-RW-ZI分析 下图为keil编译后的结果&#xff1a; 单位为Byte。Code是程序大小。RO是常量大小。RW是读写变量占用大小&#xff0c;如已初始化的静态变量和全局变量。ZI是全零变量占用大小&#xff0c;如未初始化的static修饰的静态变量、全局…

项目管理-项目绩效域2/2

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 八大绩效域包括&#xff1a;“团干部 策划开公交” 团队、干系人、不确定性、测试、规划、开发方法与生命周期、项目工作、交付。 上节…

在全志H616核桃派1B开发板Python进行GPIO按键功能实现

前言​ 按键是最简单也最常见的输入设备&#xff0c;很多产品都离不开按键&#xff0c;包括早期的iPhone&#xff0c;今天我们就来学习一下如何使用Python来编写按键程序。有了按键输入功能&#xff0c;我们就可以做很多好玩的东西了。 实验目的​ 编程实现按键输入检测。 …

Python从0到POC编写--SQL注入

SQL注入POC编写。 环境&#xff1a; win10 &#xff0c;phpStudy &#xff0c;python3.7 &#xff0c;sqli-labs 虚拟域名&#xff1a; www.sql.com 简单的POC&#xff1a; 说起来也简单&#xff0c; 就是请求–>响应&#xff0c; 然后再判断返回信息是否存在注入。 本…

linux虚拟机配置环境

1.配置虚拟机 在VMware中安装CentOS7&#xff08;超详细的图文教程&#xff09;_在vmware上安装centos-CSDN博客https://blog.csdn.net/qq_45743985/article/details/121152504 2.固定虚拟机ip地址 Vmware虚拟机Linux配置固定IP地址&#xff08;详细版&#xff09;_虚拟机固…

华为数据之道第四部分导读

目录 导读 第四部分 第10章 未来已来&#xff1a;数据成为企业核心竞争力 数据&#xff1a;新的生产要素 数据被列为生产要素&#xff1a;制度层面的肯定 数据将进入企业的资产负债表 数据资产的价值由市场决定 大规模数据交互的企业数据生态 数据生态离不开底层技术的…

OpenHarmony 4.0 实战开发——分布式软总线解析:设备发现与传输

OpenHarmony 的分布式软总线子系统为 OpenHarmony 系统提供的通信相关的能力&#xff0c;包括&#xff1a;WLAN 服务能力、蓝牙服务能力、软总线、进程间通信 RPC&#xff08;Remote Procedure Call&#xff09;等通信能力。 其中主要包括&#xff1a; WLAN 服务&#xff1a;…

使用unplugin-icons报错:Icon `eos-icons/ai` not found

代码&#xff1a; import IconNanobert from ~icons/eos-icons/ai 报错&#xff1a; Icon eos-icons/ai not found解决办法&#xff1a; npm i -D iconify-json/eos-icons &#xff08;把eos-icons替换成报错的那个collection-id即可&#xff0c;collection-id名称见图2&…

CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密&#xff08;如下图&#xff09;&#xff0c;苦苦思索其逆向运算&#xff0c;被硬控了很久&#xff0c;也没搜到什么资料来解释这个问题&#xff08;也许是太简单&#xff1f;&#xff1f;蒟蒻博主怀疑人生……&#xff09; 经过博主不…

[C++]哈希应用-布隆过滤器快速入门

布隆过滤器 布隆过滤器&#xff08;Bloom Filter&#xff09;是一个由布隆在1970年提出的概率型数据结构&#xff0c;它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器的主要特点是高效的插入和查询&#xff0c;可以用于检索一个元素是否在一个集合中。 原理…

Springboot整合飞书向群组/指定个人发送消息/飞书登录

Springboot整合飞书向群组发送消息 飞书开放平台创建企业自建应用 添加应用能力-机器人 创建完成后&#xff0c;进入应用详情页&#xff0c;可以在首页看到 App Id 和 App Secret 在飞书pc端创建一群机器人 此处可以拿到该机器人的webhook地址,通过https的方式,也可以调用发送…

JavaEE企业级开发中常用的JDK7和JDK8的时间类

JDK7时间类 全世界的时间有一个统一的计算标准 在同一条经线上的时间是一样的 格林威治时间 简称GMT 计算核心 地球自转一天是24小时 太阳直射正好是12小时 但是误差太大 现在用原子钟来代替 用铯原子震动的频率来计算时间&#xff0c;作为世界的标准时间UTC 中国标准时间…

Spring-依赖注入的处理过程

前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到AutowireCapableBeanFactory中有两个方法&#xff1a; 第一个是单个注入&#xff1a;…

2024蓝桥杯CTF writeUP--cc

给了个网页&#xff0c;里面有加密算法&#xff0c;密钥&#xff0c;密文 使用在线解码工具 CTF最全在线工具整理_在线ctf工具-CSDN博客 将输出的密文&#xff0c;密钥&#xff0c;vi&#xff0c;加密方式一一对应

谈谈IP地址

IP地址 IP地址概念动态分配 IP(DHCP)NAT机制(网络转换机制)IPv6 IP地址组成特殊的IP地址 IP地址 IP协议报文结构: 概念 IP地址: 描述了主机的具体位置.有32位,利用点分十进制的方式来表示.例如: 192.168.190.77 32位ip地址表示的数据非常有限,42亿九千万…, 那么ip地址不够用…