ubuntu,debian,redhat,fedora,centos

测量/计算程序运行时间

分类:C/C++C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:

clock_t clock( void );

这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对它的定义:

  1. #ifndef _CLOCK_T_DEFINED
  2. typedef long clock_t;
  3. #define _CLOCK_T_DEFINED
  4. #endif

继续阅读 »

fopen和open的具体区别

分类:C/C++1、open 是系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,fopen是C的库函数,返回的是一个指向文件结构的指针。

2、fopen的实现要调用open, 关键看你想返回什么了, FILE指针还是描述符?

3、32位环境下,编译加“-D_FILE_OFFSET_BITS=64” 要在open里加O_LARGEFILE标记

  1. static int ext2_open_file (struct inode * inode, struct file * filp)
  2. {
  3. if (!(filp->f_flags & O_LARGEFILE) &&
  4.        inode->i_size > 0x7FFFFFFFLL)
  5. return -EFBIG;
  6. return 0;
  7. }

0×7FFFFFFF就是2G-1。 看一下这个逻辑, 就知道open时必须制定O_LARGEFILE.

继续阅读 »

将一个结构体拷贝到字符数组缓冲区,再读出

分类:C/C++

  1. #include <stdio.h> 
  2. #include <memory.h> 
  3.  
  4. typedef struct 
  5. { 
  6. int cmd;
  7. void *param;
  8. }st;
  9.  
  10. char buf[50];
  11.  
  12. int main(int argc, char* argv[]) 
  13. { 
  14. st st1,*st2;
  15. st1.cmd = 1;
  16. st1.param = &st1.cmd;
  17.  
  18. memcpy(buf, &st1, sizeof(st));
  19.  
  20. st2 = (st*)buf;
  21. printf("cmd:%d\n", st2->cmd);
  22. printf("param:%d\n", st2->param);
  23. return 0;
  24. }

Eclipse + CDT + MinGW + MySQL环境搭建解决方案

分类:C/C++环境说明: 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连接成功后,发出查询之前,加入如下代码

  1. mysql_set_character_set(&mysql,"gb2312");

如有问题,请发邮件到 cdkey51@linuxany.com ,大家一起探讨。

继续阅读 »

print line help for debug

分类:C/C++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.

继续阅读 »

返回顶部