C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock( void );
这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:
- #ifndef _CLOCK_T_DEFINED
- typedef long clock_t;
- #define _CLOCK_T_DEFINED
- #endif
继续阅读 »
1、open 是系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,fopen是C的库函数,返回的是一个指向文件结构的指针。
2、fopen的实现要调用open, 关键看你想返回什么了, FILE指针还是描述符?
3、32位环境下,编译加“-D_FILE_OFFSET_BITS=64” 要在open里加O_LARGEFILE标记
- static int ext2_open_file (struct inode * inode, struct file * filp)
- {
- if (!(filp->f_flags & O_LARGEFILE) &&
- inode->i_size > 0x7FFFFFFFLL)
- return -EFBIG;
- return 0;
- }
0×7FFFFFFF就是2G-1。 看一下这个逻辑, 就知道open时必须制定O_LARGEFILE.
继续阅读 »
环境说明: Windows XP, Eclipse 3.5, MinGW 5.1.4, Mysql 5.1.36, CDT 3.1
在Eclipse下用CDT和MinGW编写C访问Mysql时会出现 undefined reference to `mysql_init@4′的问题,这是因为mingw编译时找不到静态库的原因,网上的解决办法一般是用:reimp.exe及dlltool.exe重新生成libmysql.def和libmysql.a,然后用libmysql.a。具体命令是:
dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libmysql.a -k
奇怪的是用这这个办法生成的libmysql.a为0字节,后来查看有libmysql.lib文件,试着将其改名为libmysql.a,问题得到解决,具体解决步骤如下:
1、添加Mysql头文件:
方法1:项目->属性->C/C++ Build->Tool Settings->GCC C Compiler->Directories 中添加你的头文件所在目录,包括Mysql中的include目录。
方法2:将Mysql中的include目录拷到项目下的头文件目录下或MinGW的公共include目录下,目录改名为mysql。
2、添加用于gcc编译的mysql静态库文件
复制mysql安装目录中的\lib\opt\libmysql.lib为libmysql.a。
另外查询或插入记录时乱码问题的解决:
在mysql连接成功后,发出查询之前,加入如下代码
- mysql_set_character_set(&mysql,"gb2312");
如有问题,请发邮件到 cdkey51@linuxany.com ,大家一起探讨。
继续阅读 »
The simplest debug technique is to print out a line contains the required variables value. By printing out a line at a suspect bugs point, it helps for debug . With few magic variables, that ease us debug even more.
They are __FUNCTION__, __PRETTY_FUNCTION__, __LINE__, __FILE__ .
__FUNCTION__ will returns a string of the function name where the print line stay.
__PRETTY_FUNCTION__ will only recognized by gcc compiler, that returns function name with indication the function is from which class.
__FILE__ returns which source code filename.
__LINE__ returns the exact line of the print line.
继续阅读 »