这篇说的是我开始搞encoder.c这个文件了,因为我后面要用到这个文件来做实验的,用它来生成基本的数据块和校验块,所以就搞得标准和正式点吧,首先重命名后缀名为cpp,头文件的声明也要注意下用extern “C"(不过这里我还是打算以后把五个头文件和五个c文件都写成cpp好了,开源出一套用于win32下的版本的jerasure吧,虽然也谈不上什么贡献,囧……)
好了,废话不多说,一边记录下需要改的点:
第一个:原本的struct timeval是用不了的,要添加上#include <WinSock2.h>
第二个:还是老生常谈,改一改bzero为memset
第三个:encoder里面搞了很多个东西,包括第一点所说的,来计算各个子进程的用时,其实第一个头文件也可以不加,看了下源码也就是计时而已,用各种方法都可以,普通的time也可以,有个很高精读的什么query也可以,方法很多,不一一细说了,这篇文章不错,感谢这位作者的总结:http://www.cnblogs.com/dwdxdy/p/3214905.html
我最后采用的是精读比较高的QueryPerformanceCounter,要包含一个windows.h,如法如下,这样表示的就是用了多少毫秒,后面还带两位小数呢:
LARGE_INTEGER t1, t2, tc; QueryPerformanceFrequency(&tc); QueryPerformanceCounter(&t1); for(int i = 0;i < 10000;i++) { cout<<i<<endl; } QueryPerformanceCounter(&t2); cout<<(t2.QuadPart - t1.QuadPart) * 1000.0 / tc.QuadPart<<endl;
第四个:里面有些signal的操作的,我之前也没怎么过这么高大上的东西,添加个<signal.h>吧,然后用SIGINT代替SIGQUIT
第五个:添加个<direct.h>
第六个:现在开始处理它用c的函数fopen等一大堆丑陋的函数写的处理文件的过程了,其实也就打开,创建,获取大小,这样,然后顺便提一下fgets是用来读取内容的,以行为单位或者说以结束符为单位,所以一般都是加上while循环来搞文件的内容。
首先把mkdir的函数的第二个参数去掉吧,只接受一个参数的,mkdir换成_mkdir也可以,只不过前者会出一个警告而已,这里我保留了。
接下来是那个获取文件大小的方法,额,我觉得好好的一个很简单获取属性的一个过程怎么经过FILE*之后就复杂了呢,好吧不管了,反正就按它的规则来吧,谁叫我是菜鸟呢,呵呵。
如下:记得第四行,很比较的,把指针移到初始的位置,不然就到文件尾了。
FILE* tempfile = fopen("I://test.txt","rb"); fseek(tempfile, 0, SEEK_END); long size = ftell(tempfile); fseek(tempfile, 0,SEEK_SET);
fclose(tempfile);
题外话,偶然发现了getcwd这个函数还蛮不错的,而且又可以跨平台,权当mark一下:
char* tmp_dir = getcwd((char*)malloc(sizeof(char)*1000),1000); printf("%s\n", tmp_dir);
第七个:修改下文件的路径,主要就是把/变成\\,因为是windows