• mycat.c的功能与系统cat程序相同
  • mycat将指定的文件内容输出到屏幕,例子如下:
  • 要求使用系统调用open/read/write/close实现
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
$ ./mycat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

实现思路:通过main函数接受要打开的文件,调用open打开它,通过stat函数获取该文件的大小,然后将文件的内容读取出来,输出到屏幕上。
实现代码:

#include<stdio.h>
#include<stdlib.h>#include<sys/stat.h>
#include<unistd.h>#include<sys/types.h>
#include<fcntl.h>int main(int argc,char *argv[]){struct stat st;int fsize;int fd;char *buffer;if(argc!=2){printf("Error:parameter wrong!\n");exit(0);}fd=open(argv[1],O_RDONLY);if(fd<0){printf("Error:open file wrong!\n");exit(0);}stat(argv[1],&st);fsize=st.st_size;buffer=(char*)malloc((1+fsize)*sizeof(char));if(!buffer){printf("Error:memory wrong!\n");exit(0);}read(fd,buffer,fsize);write(1,buffer,fsize);close(fd);return 0;
}

运行结果

操作系统上机作业--使用系统调用实现mycat相关推荐

  1. 操作系统上机作业--使用系统调用实现mycp

    mycp.c的功能与系统cp程序相同 将源文件复制到目标文件,例子如下: 要求使用系统调用open/read/write/close实现 $ cat /etc/passwd root:x:0:0:ro ...

  2. 操作系统上机作业--实现mysys(多进程)

    mysys.c: 实现函数mysys,用于执行一个系统命令,要求如下 mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使用fork/exec/wait系统调用实现m ...

  3. 操作系统上机作业--创建N个线程(多线程)

    ring.c: 创建N个线程,它们构成一个环 • 创建N个线程:T1.T2.T3.- TN • T1向T2发送整数1 • T2收到后将整数加1 • T2向T3发送整数2 • T3收到后将整数加1 • ...

  4. 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)

    pc2.c: 使用信号量解决生产者.计算者.消费者问题 • 功能和前面的实验相同,使用信号量解决 实现思路: 生产者.计算者.消费者三者之间的关系和上一个编程任务一样,不一样的是,将互斥量.条件变量封 ...

  5. 操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)

    pc1.c: 使用条件变量解决生产者.计算者.消费者问题 /* • 系统中有3个线程:生产者.计算者.消费者 • 系统中有2个容量为4的缓冲区:buffer1.buffer2 • 生产者生产'a'.' ...

  6. 操作系统上机作业--多线程排序

    sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序 ...

  7. 操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)

    pi2.c: 使用N个线程根据莱布尼兹级数计算PI • 与上一题类似,但本题更加通用化,能适应N个核心,需要使用线程参数来实现 • 主线程创建N个辅助线程 • 每个辅助线程计算一部分任务,并将结果返回 ...

  8. 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)

    pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = PI/4 • 主线程创建1个辅助线程 • 主线程计算级数 ...

  9. 操作系统上机作业--实现shell(2)(多进程)

    sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路: 和sh1.c ...

最新文章

  1. 安装NUC972的BSP
  2. linux创建 / 删除用户及用户管理
  3. 【Linux】一步一步学Linux——w命令(227)
  4. 智慧交通day02-车流量检测实现05:小车匀加速案例
  5. 计算机二级选择题考word基础知识吗,计算机二级ms office只考选择题吗?好考吗
  6. 诗与远方:无题(四)
  7. Android 应用开发(第四章)---APP数据埋点
  8. Android 布局系列篇
  9. 解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 问题(转)
  10. 在Linux系统部署docsify工具小记
  11. 关于最新的APP上架流程
  12. 用python开发微信公众平台聊天机器人
  13. 用pdfminer把PDF文件转化为文本文件
  14. CURL: CURLE_COULDNT_CONNECT问题探究
  15. QQ远程提示系统权限原因暂时无法操作怎么办
  16. C/C++内存检测工具valgrind--memcheck
  17. Proteus仿真报错——No power supply specified for net VDDA/VSSA in Power Rail Configuration
  18. 【Python】数据分析——用户行为
  19. elementui icon图标大全
  20. 云教学服务器系统软件多少钱,LanStarMaxi多机房云教学管理平台

热门文章

  1. javaScript学习笔记之类型转换
  2. 解决 There are no resources that can be added or removed from the server
  3. 二:熟悉 TCP/IP 协议
  4. 深入理解表单脚本系列第一篇——表单对象
  5. web3.js_1.x.x--API(一)event/Constant/deploy/options
  6. Jquery——hover与toggle
  7. jQuery -- 光阴似箭(五):AJAX 方法
  8. 在 HTML 中引入 vue.js 写页面
  9. 关于常用的编码工具如何引入jar包
  10. Jfinal 文件上传