资源描述:
《Linux系统编程复习提纲代码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、利用文件系统调用函数实现cp命令,例如./a.outa.txtb.txt当前目录下的a.txt到b.txt#include#include#include#include#defineBUFFER_SIZE1024intmain(intargc,char**argv){FILE*from_fd;FILE*to_fd;longfile_len=0;charbuffer[BUFFER_SIZE];char*ptr;/*判断入参*/if(argc!=3){printf("
2、Usage:%sfromfiletofile",argv[0]);exit(1);}/*打开源文件*/if((from_fd=fopen(argv[1],"rb"))==NULL){printf("Open%sError",argv[1]);exit(1);}/*创建目的文件*/if((to_fd=fopen(argv[2],"wb"))==NULL){printf("Open%sError",argv[2]);exit(1);}/*测得文件大小*/fseek(from_fd,0L,SEEK_END);file_len=ftell(fr
3、om_fd);fseek(from_fd,0L,SEEK_SET);printf("fromfilesizeis=%d",file_len);/*进行文件拷贝*/while(!feof(from_fd)){fread(buffer,BUFFER_SIZE,1,from_fd);if(BUFFER_SIZE>=file_len){fwrite(buffer,file_len,1,to_fd);}else{fwrite(buffer,BUFFER_SIZE,1,to_fd);file_len=file_len-BUFFER_SIZE;}//写入完成
4、后清空缓冲区memset(buffer,0,BUFFER_SIZE);}fclose(from_fd);fclose(to_fd);exit(0);}1、通过leek函数,计算文件大小。#include#includeoff_tlseek(intfd,off_tpos,intorigin);fd文件描述符originSEEK_CUR:若pos为0,返回当前文件位置(相对文件当前读写指针的位置+pos)SEEK_END:若pos为0,设为文件尾部(相对当前文件长度+pos)SEEK_SET:若pos为0,设
5、文件开始(将文件设置成pos)Pos文件偏移量返回值:成功返回新文件位置,失败返回-1运行时,要输入要计算文件的名字,和一个复制用的文件名(可不存在的)#include//printffprintf#include//memset#include//readwritelseek#include//exit#include//errno全局变量#include//open#defineLEN1024voidmycp(intfd_in,in
6、tfd_out){charbuff[LEN]={0};intsize;intlen;//如果读取成功,将缓冲区数据写入out文件while((size=read(fd_in,buff,sizeof(buff)))>0){//写入数据,如果失败,程序退出if(write(fd_out,buff,size)!=size){fprintf(stderr,"writeerror:%s",strerror(errno));exit(1);}//打印偏移量len=lseek(fd_in,0,SEEK_CUR);printf("读了%d",len);//
7、写入完成后清空缓冲区memset(buff,0,sizeof(buff));}if(size<0){fprintf(stderr,"readerror:%s",strerror(errno));exit(1);}return;}intmain(intargc,char**argv){//判断参数是否输入正确(是否输入了两个文件名)if(argc<3){fprintf(stderr,"输入参数出错:%s",strerror(errno));exit(1);}//打开文件,判断打开是否失败(打开需计算的文件)intfd_in=open(argv
8、[1],O_RDONLY);if(fd_in<0){fprintf(stderr,"打开文件出错:%s",strerr