- 实验任务
- 用系统调用函数编写一个C程序mycat.c,实现类似cat命令的功能,例如:./mycat file.txt,则显示file.txt的内容,其中./mycat是该C程序经过编译后的可执行文件。
2、用系统调用函数编写一个C程序,将某个命令的输出储存到文件out.txt中。例如输入ls –l | ./output将ls –l的输出储存到out.txt中,其中./output是该C程序经过编译后的可执行文件。
- 实验步骤和结果
1、用系统调用函数编写一个C程序mycat.c,实现类似cat命令的功能,例如:./mycat file.txt,则显示file.txt的内容,其中./mycat是该C程序经过编译后的可执行文件。
//c语言代码:
#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;
}
运行结果:
- 编写一个shell脚本,传递一个参数表示目录名,删除给定的某目录下所有内容为空的.c文件,并列出被删的文件名。
//C语言代码:
#include<stdio.h>
#include<string.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
int main(){
char buf[1024];
int n;
int fd =open("out.txt",O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while((n=read(0,buf,sizeof(buf)))>0)
write(fd,buf,n);
return 0;
}
运行结果: