- 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;
}
运行结果