Linux实验报告_大三上
实验三 普通文件和目录编程
1.编写程序mycp.c,实现从命令行读入文件的复制功能,用原始文件系统调用。
实验流程图:
判断输入main函数参数个数argc
判断输入main函数参数个数argc
argc!=3
no
Exit(0)
fd1=Open(argv[1],O_RDONLY);
fd2=open(argv[2],O_RDWR|O_CREAT);
1
read(fd1,buf,bufsize);
write(fd2,buf,i);
if(i!=bufsize)
break;
实验程序代码:
//mycp.c
#include
#include
#include
#include
#define bufsize 5
int main(int argc,char * argv[])
{
int fd1,fd2;
int i;
char buf[bufsize];
if(argc!=3)
{
printf("argument error\n");
exit(1);
}
fd1=open(argv[1],O_RDONLY);
if(fd1==-1)
{
printf("file %s can not opened\n",argv[1]);
exit(1);
}
fd2=open(argv[2],O_RDWR|O_CREAT);
if(fd2==-1)
{
printf("Can not open file %s\n",argv[2]);
exit(1);
}
while(1)
{
i=read(fd1,buf,bufsize);
write(fd2,buf,i);
if(i!=bufsize) break;
}
close(fd1);
close(fd2);
return 0;
}
Linux环境下运行情况如下:
road@ubuntu:~/桌面/work$ gcc -o cp cp.c
road@ubuntu:~/桌面/work$ ./cp
argument error
Please use:cp file1 file2
road@ubuntu:~/桌面/work$ ./cp a b
其中,a为一文件,b为空文件。
编写程序mycat.c,实现文件内容的显示,用原始文件系统调用实现。
实验流程图:
通过main函数从键盘输入命令行
通过main函数从键盘输入命令行
Argc=2 ?
Argc=2 ?
No 重新输入命令行
fd=open(argv[1],O_RDONLY
fd=open(argv[1],O_RDONLY)
不等于1报错
while((num=read(fd,buffer,99))>0)
while((num=read(fd,buffer,99))>0)
buffer[num]='\0';
buffer[num]='\0';
printf("%s",buffer);
实验源代码如下:
//mycat.c
#include
#include
#include
#include
#include
int main(int argc,char* argv[])
{
int fd;
char buffer[100];
int num;
if(argc!=2)
{
printf("usage : %s filename\n",argv[0]);
return 1;
}
if((fd=open(argv[1],O_RDONLY))==-1)
{
perror("cannot open the file");
return 1;
}
while((num=read(fd,buffer,99))>0)
{
buffer[num]='\0';
printf("%s",buffer);
}
close(fd);
return 0;
}
Linux环境下运行情况如下:
road@ubun