当前位置: 首页 > news >正文

8.1作业

文件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');elseputchar('-');a=a>>1;if((m&a)!=0)putchar('w');elseputchar('-');a=a>>1;if((m&a)!=0)putchar('x');elseputchar('-');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');elseputchar('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]="";char path[300]="";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;}}sprintf(path,"%s%s",l,rp->d_name);if(stat(l,&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.lryc.cn/news/105194.html

相关文章:

  • linux-安全技术
  • 如何在免费版 pycharm 中使用 github copilot (chatGPT)?
  • SSD202D-UBOOT-FDT-获取DTB
  • 【Maven】Setting文件分享
  • 使用requestAnimationFrame 实现倒计时功能js(简单秒数倒计时)
  • jenkins通过sshPut传输文件的时候,报错Permission denied的SftpException
  • 【Python】数据分析+数据挖掘——探索Pandas中的数据筛选
  • [数据集][目标检测]天牛数据集目标检测数据集VOC格式3050张
  • python_day16_设计模式
  • uniapp开发小程序-实现中间凸起的 tabbar
  • Vue引入与Vue拦截原理
  • 2023年电赛---运动目标控制与自动追踪系统(E题)OpenMV方案
  • 6G内存运行Llama2-Chinese-7B-chat模型
  • 项目经理必备-项目总体计划模板-制式文件,可直接填写使用-公司可用
  • 正则表达式系列|(以xx开头xx结尾提取、切分、替换)
  • 金融学复习博迪(第1-5章)
  • 【前端知识】React 基础巩固(三十七)——自定义connect高阶组件
  • 前端PDF导出,使用html2Canvas和jsPDF插件
  • Android 设备兼容性使用详解
  • vnc加固
  • Windows下Nginx安装与配置教程
  • Iterator迭代器和Generator生成器
  • Modbus-RTU协议C#实现
  • Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
  • 基于组合双向拍卖的共享储能机制研究(Matlab代码实现)
  • 服务机器人有哪些品类
  • 3.netty和protobuf
  • NLP实践——Llama-2 多轮对话prompt构建
  • 《TCP IP网络编程》第十四章
  • 网络基础-认识每层的设备和每层的特点用途