免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2477 | 回复: 7

哪位仁兄帮我看看这个奇怪的问题啊? [复制链接]

论坛徽章:
0
发表于 2010-09-29 17:06 |显示全部楼层
5可用积分
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "/usr/local/mysql/include/mysql/mysql.h"

int main(void) {
const char *host = "localhost";
const char *user = "root";
const char *pass = "123";
const char *db = "snort1";
char *ccc;
MYSQL mysql;
MYSQL_RES *rs;
MYSQL_ROW row;
mysql_init(&mysql);

if (!mysql_real_connect(&mysql, host, user, pass, db, 0, NULL, 0)) {
   printf("%s", mysql_error(&mysql));
}
char *sql = "SELECT COUNT(*) AS NUM FROM event WHERE timestamp BETWEEN (NOW()-10) AND NOW()";
for(;1>0; )
{
        sleep(1);//奇怪的问题在这里,为什么这里把sleep函数去掉编译就可以正常执行,结果是0,而不去掉,编译可以通过,但是执行没有任何结果.无反应
        if (mysql_query(&mysql, sql)!=0) {
           printf( "%s", mysql_errno(&mysql), mysql_error(&mysql));
        }

        rs = mysql_store_result(&mysql);
        row = mysql_fetch_row(rs);
        ccc=row[0];
        printf( "%s--", ccc);
        mysql_free_result(rs);
}
mysql_close(&mysql);

return 1;
}

最佳答案

查看完整内容

回复 1# liu_hacker 不是不成功,应该是输出没显示而已,你在每个printf加一个\n或者,printf加上fflush(stdout)应该就有了

论坛徽章:
0
发表于 2010-09-29 17:06 |显示全部楼层
回复 1# liu_hacker


    不是不成功,应该是输出没显示而已,你在每个printf加一个\n或者,printf加上fflush(stdout)应该就有了

论坛徽章:
0
发表于 2010-09-29 17:23 |显示全部楼层
你把sleep(1);那句代码上下都加上句输出语句看看到底发生了什么.

论坛徽章:
0
发表于 2010-09-29 17:38 |显示全部楼层
本帖最后由 liu_hacker 于 2010-09-29 17:39 编辑

回复 2# davelv
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "/usr/local/mysql/include/mysql/mysql.h"

int main(void) {
const char *host = "localhost";
const char *user = "root";
const char *pass = "123";
const char *db = "snort1";
char *ccc;
MYSQL mysql;
MYSQL_RES *rs;
MYSQL_ROW row;
mysql_init(&mysql);

if (!mysql_real_connect(&mysql, host, user, pass, db, 0, NULL, 0)) {
   printf("%s", mysql_error(&mysql));
}
char *sql = "SELECT COUNT(*) AS NUM FROM event WHERE timestamp BETWEEN (NOW()-10) AND NOW()";
for(; ; )//这里为了不输出表情,特别多空了一格,原程序没有的。下面同理
{
        printf( "%s--", "111") ;
        sleep(1);
        printf( "%s--", "222") ;
        if (mysql_query(&mysql, sql)!=0) {
           printf( "%s", mysql_errno(&mysql), mysql_error(&mysql));
        }

        rs = mysql_store_result(&mysql);
        row = mysql_fetch_row(rs);
        ccc=row[0];
        printf( "%s--", ccc);
        mysql_free_result(rs);
}
mysql_close(&mysql);

return 1;
}

没有任何结果,依然无反应,只有ctrl+c强行结束

论坛徽章:
0
发表于 2010-09-29 17:49 |显示全部楼层
可能是mysql的bug

估计加入sleep 操作之后,mysql数据库的server端在判断session有效性的地方出现问题了,导致session被kill掉了之后,锁住了。

论坛徽章:
0
发表于 2010-09-29 17:53 |显示全部楼层
你判断过mysql_store_result的返回吗?是否一定成功?

论坛徽章:
0
发表于 2010-09-29 19:40 |显示全部楼层
每个printf输出最后加一个\n试试

论坛徽章:
0
发表于 2010-09-30 09:52 |显示全部楼层
回复 7# tyc611


    谢谢仁兄了。c写的太少。这都忘记了。呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP