前段时间没事,学了一下Linux环境下的C编程,一直写Java代码,再写C代码感觉还有些不习惯,下面是自己写的一个合并多个文件的例子。
#include <stdio.h> #include <stdlib.h> #include <time.h> //#include <windows.h> #define BUF_SIZE = 1024; int fconcat(FILE* destfile,const char* srcfile) { char buffer[8]; FILE* srcfp; int len; int charlen; if ((srcfp = fopen(srcfile,"rb")) == NULL) { perror("open file failed!"); return 0; } charlen = sizeof(char); printf("char length=%d",charlen); while ((len = fread(buffer,1,8,srcfp)) > 0) { fwrite(buffer,1,len,destfile); } printf("last len=%d\n",len); fclose(srcfp); return 1; }; int createfile(char* filename,char ch) { int size = 999999; int i; FILE* srcfp; if ((srcfp = fopen(filename,"w+")) == NULL) { perror("open file failed!"); return 0; } for (i=1;i<size;i++) { fputc(ch,srcfp); if(i%100 == 0) { fputc('\n',srcfp); } } fclose(srcfp); return 1; } int main(void) { FILE* fp; char* srcfile = "/opt/nohup2.log.tmp"; char* destfile = "/opt/nohup.log"; int fileSize = 5; int sslen; int i; char pnf[64]; //DWORD start,finish,usetime; int tstart,tfinish,uset; char chs[5] = {'a','b','c','d','e'}; //start = GetTickCount(); tstart = time(NULL); if ((fp=fopen(destfile,"ab+")) == NULL) { perror("Open file failed\n"); exit(1); } for (i=0;i<fileSize;i++) { sprintf(pnf,"%s%d",srcfile,i); printf("合并文件%s\n",pnf); fconcat(fp,pnf); //createfile(pnf,chs[i]); } fclose(fp); //finish = GetTickCount(); tfinish = time(NULL); //usetime = finish - start; uset = tfinish - tstart; printf("耗时%d秒",uset); return 0; }
这是标准c代码,在windows环境里也可以运行,但是取时间的方法和Linux不同,换成注释里的代码就可以在windows环境中运行了。