IO day4 作业

1.

 1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <head.h>
  5 char lx(mode_t m)
  6 {
  7     switch(m & S_IFMT)
  8     {
  9     case S_IFSOCK:return 's';
 10     case S_IFLNK:return 'l';
 11     case S_IFREG:return '-';
 12     case S_IFBLK:return 'b';
 13     case S_IFDIR:return 'd';
 14     case S_IFCHR:return 'c';
 15     case S_IFIFO:return 'p';
 16     }
 17 }
 18 int main(int argc, const char *argv[])
 19 {
 20     char a[50]="";
 21     char c[10]="";
 22     printf("请输入文件路径\n");                                                                                                           
 23     scanf("%s",a);
 24     printf("请输入文件名称\n");
 25     scanf("%s",c);
 26     strcat(a,c);
 27     struct stat buf;28     
 28 if(stat(a,&buf) < 0)
 29     {
 30         ERR_MSG("stat");
 31         return -1;
 32     }
 33     char b=lx(buf.st_mode);                                                                                                               
 34     if('d' == b)
 35     {
 36         DIR *op = opendir(a);
 37         if(NULL == op)
 38         {
 39             ERR_MSG("opendir");
 40             return -1;
 41         }
 42         int i=0;
 43         while(1)
 44         {
 45             struct dirent *dp = readdir(op);
 46             if(NULL == dp)
 47             {
 48                 if(0 == errno)
 49                 {
 50                     printf("目录文件读取完毕\n");
 51                     break;
 52                 }
 53                 else
 54                 {
 55                  ERR_MSG("readdir");
 56                     return -1;
 57                 }
 58             }
 59             struct stat buf1;
 60             if(stat(dp->d_name,&buf1) < 0)                                                                                                
 61             {
 62                 ERR_MSG("stat");
 63                 return -1;
 64             }
 65             char d=lx(buf1.st_mode);
 66 
 67             printf("[%d]%c %s\n",++i,d,dp->d_name);
 68         }
 69         if(closedir(op) < 0)
 70         {
 71             ERR_MSG("closedir");
 72             return -1;
 73         }
 74     }
 75     else
 76     {
 77         printf("%c %s\n",b,c);
 78     }
 79     return 0;
 80 }

2.

1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <head.h>
  5 int main(int argc, const char *argv[])
  6 {
  7     int fd1 = open("a.c",O_RDONLY);
  8     int fd2 = open("b.c",O_WRONLY | O_CREAT,0777);
  9     if(fd1 < 0)
 10     {
 11         ERR_MSG("open");
 12         return -1;
 13     }
 14     if(fd2 < 0)
 15     {
 16         ERR_MSG("open");
 17         return -1;
 18     }
 19     pid_t aid=fork();
 20     char buf[1];
 21     ssize_t res = 0;
 22     int a=0;                                                                                                                              
 23     ssize_t b=0;
 24     while(1)
 25     {
 26         bzero(buf,sizeof(buf));
 27         res=read(fd1,buf,sizeof(buf));
 28       if(0 == res)
 29         {
 30             break;
 31         }
 32         a+=res;
 33     }                                                                                                                                     
 34     if(aid > 0)
 35     {
 36         sleep(1);
 37         off_t c=lseek(fd2,0,SEEK_SET);
 38         off_t d=lseek(fd1,0,SEEK_SET);
 39         if(c < 0)
 40         {
 41          ERR_MSG("lseek");
 42          return -1;
 43         }
 44         if(d < 0)
 45         {
 46          ERR_MSG("lseek");
 47          return -1;
 48         }
 49         while(1)
 50         {
 51             bzero(buf,sizeof(buf));
 52             res=read(fd1,buf,sizeof(buf));
 53             b+=res;
 54             if(b == ((a/2)+1))
 55             {
 56                 break;
 57             }
 58             write(fd2,buf,res);
 59         }
 60     }
 61     else if(aid == 0)
 62     {
 63         off_t c=lseek(fd1,a/2,SEEK_SET);
 64         if(c < 0)
 65         {
 66          ERR_MSG("lseek");
 67           return -1;
 68         }
 69         while(1)
 70         {                                                                                                                                 
 71             bzero(buf,sizeof(buf));
 72             res=read(fd1,buf,sizeof(buf));
 73             if(0 == res)
 74             {
 75                 break;
 76             }
 77             write(fd2,buf,res);
 78         }
 79     }
 80     else
 81     {
 82         ERR_MSG("fork");
 83         return -1;
 84     }
 85     return 0;
 86 }

3.xmid

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值