操作系统上机作业--使用系统调用实现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; } 复制代码
运行结果
作者:timestamp84821
链接:https://juejin.cn/post/7020970098231869477