03 2012 档案

摘要:相对于《简单多线程拷贝单文件v2》中,将文件下载的任务分块也作为线程,可以动态添加文件块任务。即是生产者与消费者模型。用了本Blog的《消息队列的实现》中的实现。用了《struct 初始化》中提到的参考代码方式。作为基类的msg_block_t。typedef struct ares_msg_block{ pthread_t pid; enum msg_object_type msg_type; void *data;///<*用于扩展的私有数据指针}msg_block_t;继承的msg_block_t的msg_thread_block_ttypedef s... 阅读全文
posted @ 2012-03-23 22:17 westfly 阅读(461) 评论(0) 推荐(0)
摘要:最近电脑休眠后,更新小红伞总是出现错误。avcenter.exe - Bad Image错误提示消息如下avcenter.exe - Bad Image c:\windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\COMCTL32.dll is either not designed to run on Windows or it contains an error. Try installing the program again . 阅读全文
posted @ 2012-03-21 19:55 westfly 阅读(650) 评论(0) 推荐(0)
摘要:柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。声明typedef struct zero_array{ size_t len; void * array[0];}zero_array_t;大小可以用sizeof 看看其大小printf("%d\n",sizeof(zero_array_t));//Debian IA 32 下输出4可以看到其array并没有占用空间。申请空间zero_array_t *ptr = (zero_array_t *)malloc(sizeof(zero_array_t)+sizeof(vo 阅读全文
posted @ 2012-03-20 20:19 westfly 阅读(810) 评论(2) 推荐(0)
摘要:今天调试程序,总是遇到segment fault,由于的多线程程序,gdb调试很麻烦,非常不爽,但是Bug还总是在哪里需要解决啊。只得想办法。网上说可以生成core文件,再用gdb调试core,至少可以定位到哪里出错。于是Google。segment fault产生的原因主要是与指针操作相关。《GDB调试core文件样例(如何定位Segment fault) 》详细介绍了相关错误原因View Code 一 造成segment fault,产生core dump的可能原因1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字 阅读全文
posted @ 2012-03-20 14:38 westfly 阅读(683) 评论(0) 推荐(1)
摘要:相对《简单多线程拷贝单文件示例》扩展了任务队列。主要核心在于将单个大文件分成多份(比如100),形成一个任务,并将任务用链表链接起来,形成一个队列(FIFO)或者栈(无非是顺序不同)。相对第一版来说,thread_block的定义发生了些变化,但用户接口未变。typedef struct thread_block{ int infd; ///<*文件句柄 int outfd; size_t start_position;///<*文件的写入起始位置 size_t block_size; ///<* 文件写入的终止位置[first ,last)开区间 /... 阅读全文
posted @ 2012-03-19 09:36 westfly 阅读(629) 评论(0) 推荐(0)
摘要:整理以前的代码,发现这个还有个尾巴没有做。于是花了点时间捡起来。代码如下View Code /* * ===================================================================================== * * Filename: copy.c * * Description: 多线程拷贝文件 * * Version: 1.0 * Created: 03/17/2012 04:53:09 AM * Revision: none * Compile... 阅读全文
posted @ 2012-03-18 16:43 westfly 阅读(1318) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1282水题。跟在创新工场遇到的一个问题类似,整数串判断回文。由于题目所称整数的限制,数组的大小不是太好取。参考网上的经验值。#include <stdio.h>#define MAX_ARRAY 100int ReserveNum(int a){ int ret = 0; while(a) { ret = ret *10 + a%10; a /=10; } return ret;}int main(){ int first,last; ... 阅读全文
posted @ 2012-03-17 17:40 westfly 阅读(306) 评论(0) 推荐(0)
摘要:水题http://acm.hdu.edu.cn/showproblem.php?pid=3787关键点:1)整数范围表示所需要的字符串长度。2)字符串转化为整数的函数。看代码#include <stdio.h>#define MAX_ARRAY 16int StringToNum(char *str);int main(){ char Aarray[MAX_ARRAY],Barray[MAX_ARRAY]; while(scanf("%s%s",Aarray,Barray)!= EOF) { //printf("%s\t%s\n",Aarra 阅读全文
posted @ 2012-03-17 15:02 westfly 阅读(296) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1235刚开始没有注意题目。效率不高。数组直接开到N了。View Code #include <stdio.h>#define MAX_ARRAY 1000int main(){ int scores[MAX_ARRAY]; int nTotal; int focus; int i; while(scanf("%d",&nTotal) &&nTotal) { for(i = 0; i < nTotal; ++i) { ... 阅读全文
posted @ 2012-03-17 10:24 westfly 阅读(211) 评论(0) 推荐(0)
摘要:刷水题。http://acm.hdu.edu.cn/showproblem.php?pid=1412给你两个集合,要求{A} + {B}.注:同一个集合中不会有两个相同的元素.Input每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.Output针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.求两个集合的和。我用的是vector,后来感觉应该用set的。就当熟悉stl的了。#include 阅读全文
posted @ 2012-03-16 23:09 westfly 阅读(386) 评论(0) 推荐(0)
摘要:消息队列的实现转换为经典的生产者——消费者模型。网上很多实现只能在生产者:消费 = 1:1的情况下运行。本实现参考《Unix 网络编程——卷二 进程间通信》,可以在任意配比下运行。还参考了《一种同步消息队列模型(C++)》,但由于 STL中的deque不必担心内存分配问题,所以实现只有互斥相关的操作。来看基础消息的定义,作为基类——有其它消息类型可以模拟C++中的继承机制。typedef struct ares_msg_block{ pthread_t pid; void *msg;}msg_block_t;共享内存区域,即循环消息队列的结构定义typedef s... 阅读全文
posted @ 2012-03-15 20:23 westfly 阅读(2183) 评论(0) 推荐(0)
摘要:更新到最新的7789版。打开CodeBlocks出现如下意思是gcc遇到无效指令。参考文章《cygwin 1.7升级之后,外部直接访问gcc返回Access is denied 》中说参考官方文档http://www.cygwin.com/ml/cygwin/2009-03/msg00046.html. 原来,本质问题是,cygwin1.7采用了Linux下的link方式。也就是让一个文件和另外一个文件关联。而DOS无法识别这种关联,所以,它就不知道gcc到底是gcc3还是gcc4哪个。 如果不是输入gcc,而是gcc-3或者gcc-4,那么就OK了。g++也相应是g++-3或者g++-4。所 阅读全文
posted @ 2012-03-15 19:55 westfly 阅读(1255) 评论(0) 推荐(0)
摘要:看到某个源码,有个关于struct初始化的问题不是太清楚。源码如下#define _OBJ_CONTAINER_LIST_INIT(c) \ {&(rt_object_container[c].object_list), &(rt_object_container[c].object_list)}struct rt_object_information rt_object_container[RT_Object_Class_Unknown] ={ /* initialize object container - thread */ {RT_Object_Class_T... 阅读全文
posted @ 2012-03-15 17:23 westfly 阅读(1293) 评论(0) 推荐(0)
摘要:下载一个开源的源码,没有makefile,只有很多sconscript文件,想起一个叫Scons的工具是构建这个用的。要用啊,没办法,只得安装。先安装Python,可以到http://python.org/getit/下载,现在Python有2.x和3.x的并行版本,这里下载最新的2.7.2系列。假设安装目录为C:\python2720.再安装Scons,可以到http://sourceforge.net/projects/scons/files/scons/2.1.0/,下载最新的2.1.0版本。我下载的zip包,如果方便可以下载exe的。解压到python的安装目录,有scons2.1.0 阅读全文
posted @ 2012-03-10 11:30 westfly 阅读(8193) 评论(0) 推荐(0)
摘要:白痴一下——突然发现自己真的好白痴。以前总是以为define后面跟着数字才算define成功。#define LWIP_UDP#include <stdio.h>int main(){ #ifdef LWIP_UDP printf("define\n"); #else printf("undefine\n"); #endif return 0;}输出define再测试下#define LWIP_UDP 1#include <stdio.h>int main(){ #ifdef LWIP_UDP printf("def.. 阅读全文
posted @ 2012-03-09 23:22 westfly 阅读(426) 评论(0) 推荐(0)
摘要:在LwIP移植的代码中有信号量相关接口,但是是通过线程来模拟的。以前读过,最近才感觉它是在 利用POSIX互斥锁和条件变量实现POSIX的信号量。在《Unix网络编程 卷二进程间通信》中有用System V模拟 POSIX信号量的论述。LwIP是一个轻型TCP/IP协议栈,它利用操作系统模拟层实现了信号灯。主要有如下接口函数:/**新建一个信号灯,并初始化灯的值为count*/sys_sem_t sys_sem_new(u8_t count);/**将标示符为sem的信号灯释放掉。*/void sys_sem_free(sys_sem_t sem);/**将标示符为sem的信号灯的值加1*/v 阅读全文
posted @ 2012-03-08 11:23 westfly 阅读(662) 评论(0) 推荐(0)
摘要:今天有人问到二维数组传参的事情,自己尝试着写了下。int main()//must return int{ int table[3][4]={1,2,3,4,2,3,4,5,3,4,5,6}; PrintTable((int **)table,3,4); //RowSum( table,3); RowSum2( (int **)table,3,4); PrintTable((int **)table,3,4);}函数声明为void RowSum( int array[][4], int nrow);void RowSum2(int **array,unsigned... 阅读全文
posted @ 2012-03-06 20:49 westfly 阅读(533) 评论(0) 推荐(0)
摘要:在上看到Sublime Text 2 ,恰好被Vim折腾得不行了。于是换下口味。该软件还在发展当中,是共享软件,但是作者很厚道,更TC一样并没有功能上的删减。该软件暂时不支持中文,但有强大的Package扩展功能。安装 Package管理插件http://wbond.net/sublime_packages/package_control/installationClick the Preferences > Browse Packages… menu entryBrowse up a folder and then into the Installed Packages folderD 阅读全文
posted @ 2012-03-06 20:11 westfly 阅读(600) 评论(0) 推荐(0)
摘要:打开codeblocks出现错误,但是不影响使用。不知道是哪里出了问题。 阅读全文
posted @ 2012-03-05 10:37 westfly 阅读(979) 评论(0) 推荐(0)
摘要:又在http://www.codecademy.com/泡了一下午,编写了一大堆白痴的代码。看看成绩突然想到自己做的Javascript,又突然想到自己居然知道它该怎么用,与C/C++有什么区别?或许以前做的初衷是想弄清楚一门语言背后设计的思想吧。最近《Javascript 面向对象编程》和《再谈javascript面向对象编程》或许可以一窥其中的特色。 阅读全文
posted @ 2012-03-03 20:03 westfly 阅读(144) 评论(0) 推荐(0)
摘要:由于最近新重新安装了Win7,恰逢Win8消费者预览版发布,但是被其无法卸载吓到了,于是尝试在虚拟机中安装。主要的内容可以参考《VirtualBox虚拟机安装Win8消费者预览版》(图文并茂已经很详细了)准备工作VirtualBox 最新版4.1.8已经支持Win8的安装.Win8 点击下载Windows 8 消费者预览版 简体中文版(32位/64位)产品密钥: DNJXJ-7XBW8-2378T-X22TX-BKG7J依照Sina给的教程,可能出现0xc0000260错误,解决的方法参考《虚拟机安装Windows 8出现0xc0000260错误的解决方法》,主要是两个设置。还可能出现0x00 阅读全文
posted @ 2012-03-03 19:54 westfly 阅读(486) 评论(0) 推荐(0)
摘要:有如下的代码 while(1) { printf("Command :"); gets(buf); send(sockfd,buf,MAX_BUF,0); n = recv(sockfd,buf,MAX_BUF,0); buf[n]='\0'; printf("data receive:%s\n",buf); if(0==strncmp(buf,"quit",4)); break; }结果总是只执行一次,搞得人很崩溃。后来发现if后面有个";"break... 阅读全文
posted @ 2012-03-01 20:33 westfly 阅读(146) 评论(0) 推荐(0)