操作系统上机作业--使用系统调用实现mycat
- 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相关推荐
- 操作系统上机作业--使用系统调用实现mycp
mycp.c的功能与系统cp程序相同 将源文件复制到目标文件,例子如下: 要求使用系统调用open/read/write/close实现 $ cat /etc/passwd root:x:0:0:ro ...
- 操作系统上机作业--实现mysys(多进程)
mysys.c: 实现函数mysys,用于执行一个系统命令,要求如下 mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使用fork/exec/wait系统调用实现m ...
- 操作系统上机作业--创建N个线程(多线程)
ring.c: 创建N个线程,它们构成一个环 • 创建N个线程:T1.T2.T3.- TN • T1向T2发送整数1 • T2收到后将整数加1 • T2向T3发送整数2 • T3收到后将整数加1 • ...
- 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)
pc2.c: 使用信号量解决生产者.计算者.消费者问题 • 功能和前面的实验相同,使用信号量解决 实现思路: 生产者.计算者.消费者三者之间的关系和上一个编程任务一样,不一样的是,将互斥量.条件变量封 ...
- 操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)
pc1.c: 使用条件变量解决生产者.计算者.消费者问题 /* • 系统中有3个线程:生产者.计算者.消费者 • 系统中有2个容量为4的缓冲区:buffer1.buffer2 • 生产者生产'a'.' ...
- 操作系统上机作业--多线程排序
sort.c: 多线程排序 • 主线程创建一个辅助线程 • 主线程使用选择排序算法对数组的前半部分排序 • 辅助线程使用选择排序算法对数组的后半部分排序 • 主线程等待辅助线程运行結束后,使用归并排序 ...
- 操作系统上机作业--根据莱布尼兹级数计算PI(2)(多线程)
pi2.c: 使用N个线程根据莱布尼兹级数计算PI • 与上一题类似,但本题更加通用化,能适应N个核心,需要使用线程参数来实现 • 主线程创建N个辅助线程 • 每个辅助线程计算一部分任务,并将结果返回 ...
- 操作系统上机作业--根据莱布尼兹级数计算PI(1)(多线程)
pi1.c: 使用2个线程根据莱布尼兹级数计算PI • 莱布尼兹级数公式: 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... = PI/4 • 主线程创建1个辅助线程 • 主线程计算级数 ...
- 操作系统上机作业--实现shell(2)(多进程)
sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能 • 实现文件重定向 • $ echo hello >log • $ cat log • Hello 实现思路: 和sh1.c ...
最新文章
- 安装NUC972的BSP
- linux创建 / 删除用户及用户管理
- 【Linux】一步一步学Linux——w命令(227)
- 智慧交通day02-车流量检测实现05:小车匀加速案例
- 计算机二级选择题考word基础知识吗,计算机二级ms office只考选择题吗?好考吗
- 诗与远方:无题(四)
- Android 应用开发(第四章)---APP数据埋点
- Android 布局系列篇
- 解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 问题(转)
- 在Linux系统部署docsify工具小记
- 关于最新的APP上架流程
- 用python开发微信公众平台聊天机器人
- 用pdfminer把PDF文件转化为文本文件
- CURL: CURLE_COULDNT_CONNECT问题探究
- QQ远程提示系统权限原因暂时无法操作怎么办
- C/C++内存检测工具valgrind--memcheck
- Proteus仿真报错——No power supply specified for net VDDA/VSSA in Power Rail Configuration
- 【Python】数据分析——用户行为
- elementui icon图标大全
- 云教学服务器系统软件多少钱,LanStarMaxi多机房云教学管理平台
热门文章
- javaScript学习笔记之类型转换
- 解决 There are no resources that can be added or removed from the server
- 二:熟悉 TCP/IP 协议
- 深入理解表单脚本系列第一篇——表单对象
- web3.js_1.x.x--API(一)event/Constant/deploy/options
- Jquery——hover与toggle
- jQuery -- 光阴似箭(五):AJAX 方法
- 在 HTML 中引入 vue.js 写页面
- 关于常用的编码工具如何引入jar包
- Jfinal 文件上传