8.1作业

news2024/11/15 14:08:48

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<head.h>
int main(int argc, const char *argv[])
{
	pid_t cpid=fork();
	int fd=open("./1.c",O_RDONLY);
	if(fd<0)
	{
		ERR_MSG("open");
		return -1;
	}
	printf("open success\n");
	off_t size=lseek(fd,0,SEEK_END);
	lseek(fd,0,SEEK_SET);
	char buf[20]="";
	ssize_t res=0;
	if(cpid>0)
	{
		sleep(1);
	while(1)
	{
		bzero(buf,sizeof(buf));
		off_t size1=lseek(fd,0,SEEK_CUR);
		if(size1>=size/2)
			break;
		res=read(fd,buf,sizeof(buf)-1);
		printf("%s",buf);
	}
	}
	else if(cpid==0)
	{
		lseek(fd,size/2,SEEK_SET);
		while(1){
		bzero(buf,sizeof(buf));
		res=read(fd,buf,sizeof(buf)-1);
		if(0==res)
		{
			break;
		}
		printf("%s",buf);
	}}

	else
	{
		perror("fork");
		return -1;
	}
	close(fd);
	while(1)
		sleep(1);
	return 0;
}

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

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

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<head.h>
void get_filePrmission(mode_t m)
{
	int a=0400;
	while(a)
	{
		if((m&a)!=0)
			putchar('r');
		else
			putchar('-');
		a=a>>1;
		if((m&a)!=0)
			putchar('w');
		else
			putchar('-');
		a=a>>1;
		if((m&a)!=0)
			putchar('x');
		else
			putchar('-');
		a=a>>1;
	}
	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
		putchar('s');
	return;
}
void get_localtime(time_t t)
{
	struct tm* info=NULL;
	info=localtime(&t);
	printf("%4d-%02d-%02d %02d:%02d:%02d",info->tm_year+1900,\
			info->tm_mon+1,info->tm_mday,info->tm_hour,\
			info->tm_min,info->tm_sec);
	fflush(stdout);
}
int wjsxsc(struct stat buf)
{
	get_fileType(buf.st_mode);
	get_filePrmission(buf.st_mode);
	struct passwd *pwd=getpwuid(buf.st_uid);
	if(NULL==pwd)
	{
		ERR_MSG("getpwuid");
		return -1;
	}
	printf(" %s ",pwd->pw_name);
	struct group *gid=getgrgid(buf.st_gid);
	if(NULL==gid)
	{
		ERR_MSG("getgrgid");
		return -1;
	}
	printf("%s",gid->gr_name);
	printf(" %ld ",buf.st_size);
	get_localtime(buf.st_ctime);
}
int main(int argc, const char *argv[])
{
	char l[20]="";
	printf("输入一个文件的路径及名字");
	scanf("%s",l);
	struct stat buf;
	if(stat(l,&buf)<0)
	{
		ERR_MSG("stat");
		return -1;
	}
	if(S_ISDIR(buf.st_mode))
	{
		DIR *fp=opendir(l);
		if(NULL==fp)
		{
			ERR_MSG("opendir");
			return -1;
		}
		printf("opendir success");
		int i=1;
		while(1){
			struct dirent *rp=readdir(fp);
			if(NULL==rp)
			{
				if(0==errno)
				{
					printf("文件读取成功\n");
					break;
				}
				else
				{
					ERR_MSG("readdir");
					return -1;
				}
			}
				if(stat(rp->d_name,&buf)<0)
				{
					ERR_MSG("stat");
					return -1;
				}
				wjsxsc(buf);
				printf(" %s\n",rp->d_name);
		}
		if(closedir(fp)<0)
		{
			ERR_MSG("closedir");
			return -1;
		}
	}
	else
	{
		wjsxsc(buf);
		printf(" %s\n",l);
	}
	return 0;
}

 

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

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

相关文章

构建语言模型:BERT 分步实施指南

学习目标 了解 BERT 的架构和组件。了解 BERT 输入所需的预处理步骤以及如何处理不同的输入序列长度。获得使用 TensorFlow 或 PyTorch 等流行机器学习框架实施 BERT 的实践知识。了解如何针对特定下游任务(例如文本分类或命名实体识别)微调 BERT。为什么我们需要 BERT? 正…

保护云数据库实用指南

在数字化转型时代&#xff0c;越来越多的企业将运营转移到云端&#xff0c;导致对云数据库的依赖越来越大。虽然它们提供了可扩展性和可访问性等显着优势&#xff0c;但它们也带来了独特的安全挑战&#xff0c;需要解决这些挑战以保护敏感数据免受各种威胁。 在本文中&#x…

巨人互动|Facebook海外户Facebook page的功能以及如何应用

Facebook Page是Facebook平台上的一种工具&#xff0c;是企业、品牌、机构、公益组织等组织和个人创建社交媒体宣传页面的主要方式之一&#xff0c;通过Page可以将内容传播到更广泛的受众群体&#xff0c;提高品牌知名度和曝光率。下面将详述Facebook Page的功能以及如何应用。…

第125天:内网安全-隧道技术SMBICMP正反向连接防火墙出入规则上线

知识点 #知识点&#xff1a; 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、规则-隧道技术-SMB&ICMP-隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通的问题&#xff0…

Redis 集群 (cluster)

是什么 官网&#xff1a;Redis cluster specification | Redis 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集的一部分&#xff0c;这就是Redis的集群&#xff0c;其作…

递归——在运行的过程中调用自己

递归&#xff0c;就是在运行的过程中调用自己 递归必须要有三个要素&#xff1a; ①、边界条件 ②、递归前进段 ③、递归返回段 当边界条件不满足时&#xff0c;递归前进&#xff1b;当边界条件满足时&#xff0c;递归返回。 递归关键&#xff1a;写出递推公式&#xff0c;找…

maven里面没有plugins dependence问题解决

说明&#xff1a;今天在做Nacos、Dubbo整合的时候&#xff0c;在父模块中做了版本限制&#xff0c;出错后就又把版本控制什么都删掉&#xff0c;回退到最开始的状态&#xff0c;此时父模块下面的服务右侧的 maven里面没有plugins dependence &#xff0c;然后项目全都报错。 问…

openSUSE安装虚拟化 qemu kvm

1) 第一种&#xff1a;图形界面yast安装虚拟化 左下角开始菜单搜索yast 点一下就能安装&#xff0c;是不是很简单呢 2&#xff09;第二种&#xff1a; 命令行安装 网上关于openSUSE安装qemu kvm的教程比较少&#xff0c;可以搜索centos7 安装qemu kvm的教程&#xff0c;然后…

/bin/bash: Resource temporarily unavailable

有现场反馈plsql无法连接数据库了&#xff0c;登录环境查看时发现从root切换到grid时报错/bin/bash: Resource temporarily unavailable [rootdb1 ~]# su - grid Last login: Thu Jul 27 18:45:04 CST 2023 su: failed to execute /bin/bash: Resource temporarily unavailab…

Ajax快速入门

Ajax Ajax就是前端访问服务器端数据的一个技术 还有主要就是异步交互 就是在不刷新整页面的情况下&#xff0c;和服务器交换部分我也数据 比如搜索的联想技术 同步和异步的概念 一个是客户端需要等待服务器完成处理&#xff0c;才能进行别的事 一个是客户端不需要等待服务器处…

剑指offer刷题笔记--Num61-68

1--扑克牌中的顺子&#xff08;61&#xff09; 主要思路&#xff1a; 五个数是顺子的充要条件&#xff1a;① 最大值 - 最小值 < 5&#xff08;大小王除外&#xff09;&#xff1b;② 没有出现重复的值&#xff08;大小王除外&#xff09;&#xff1b; 判断是否出现重复的值…

Centos虚拟机修改密码

1.重启系统 2.在这个选择界面&#xff0c;按e 3.找到如下位置&#xff0c;插入init/bin/sh 4.填写完成后按Ctrlx引导启动 5.输入mount -o remount, rw / (注意空格) 6.重置密码 出现以下为重置成功 7.执行touch /.autorelabel 8.退出exec /sbin/init 9.输入你的新密码…

linux系统编程重点复习--进程的控制

目录 1 复习目标 2 进程相关概念 2.2 并行和并发 2.3 PCB-进程控制块 2.4 进程状态(面试考) 3 创建进程 3.2 ps命令和kill命令 3.3 getpid/getppid 3.4 练习题 4 exec函数族 4.1 函数作用和函数介绍 4.1.1 execl函数 4.1.2 execlp函数 4.2 exec函数族原理介绍 4.3 …

MongDB文档--架构体系

阿丹&#xff1a; 在开始学习先了解以及目标知识的架构体系。就能事半功倍。 架构体系 MongoDB的架构体系由以下几部分组成&#xff1a; 存储结构&#xff1a;MongoDB采用文档型存储结构&#xff0c;一个数据库包含多个集合&#xff0c;一个集合包含多个文档。存储形式&#…

socket编程函数

1.socket函数 socket ()打开一个网络通讯口&#xff0c;如果成功的话&#xff0c;就像 open()一样返回一个文件插述待&#xff0c;应用程序可以像读写文件一样用 read/write 在网络上收发数据&#xff0c;如socet0调用出错则返回-1。对于 IPV4,domain 参数指定为AF_INET。对于 …

端口扫描工具

什么是端口扫描 端口扫描是使用可用的网络扫描程序协议之一&#xff08;如 SNMP 扫描&#xff09;扫描网络中的所有端口的过程。端口扫描是通过尝试连接到网络中的端口来执行的&#xff0c;其状态是根据端口扫描软件从这些端口收到的响应决定的。这使管理员能够全面了解网络中…

【计算机网络】11、网络连通性:ping、traceroute、nslookup

文章目录 一、ping1.1 禁 ping 二、traceroute三、nslookup3.1 非交互模式3.2 交互模式 注意&#xff0c;测试网络连通性时&#xff0c;有的机器无法 ping 通&#xff0c;但可能 telnet 能通。不要因为无法 ping 通就放弃尝试。 一、ping 1.1 禁 ping 禁 ping 是通过忽略 IC…

【vue】vue-image-lazy图片懒加载使用与介绍【超详细+npm包源代码】

简介 当前插件是基于vue3&#xff0c;写的一个图片懒加载&#xff0c;文章最下方是npm包的源码&#xff0c;你可以自己拿去研究和修改&#xff0c;如有更好的想法可以留言&#xff0c;如果对你有帮助&#xff0c;可以点赞收藏和关注&#xff0c;谢谢。 后续会添加图片放大和切…

如何在地图上寻找峨眉山零公里的龙洞湖

爬峨眉山的需要&#xff0c;住在零公里附近。 据说这附近有个好玩的地方叫龙洞湖&#xff0c;我们住得远&#xff0c;想步行去看看。拿出地图&#xff0c;搜龙洞湖&#xff0c;尴尬了。搜不到具体位置。细想&#xff0c;人家整个村就叫龙洞村&#xff0c;地图上居然没有标识&a…

【git技巧】什么是 .gitkeep

.gitkeep 文件的作用 就是——使 Git 保留一个空文件夹&#xff01; Git 是一个文件追踪系统&#xff0c;这也导致了 Git 的设计初衷是对文件进行追踪&#xff0c;所以&#xff0c;Git 不会追踪一个空目录。 但是&#xff0c;在某些情况下&#xff0c;我们确实是需要保留一些…