Ubuntu14.04系统c++调用sqlite3失败

开始运行正常,运行十分钟后出现打开失败,并提示unable to open database file,网上查都说是权限问题,于是将db文件和所在目录权限全部改为777,即sudo chmod 777 PATH
,运行十分钟还是出现上次的问题。查看该程序的进程号,ps -ef | grep XXXX得到进程号,lsof -p pid | wc -l 看到该进程打开文件数打到一千多,并通过lsof-p pid看到
同一个目录打开N多没有关闭,于是查看代码,发现该目录打开位置没有做对应的关闭操作,导致进程打开的文件数达到了系统分配给用户的打开文件最大数,无法打开数据库文件
,加上closedir(),运行一个小时,问题没有再出现。问题解决。

void Station_select(char * line_name)
{
	//lock
	list_station.clear();
	//lock
	sqlite3 *db;
	char **dbResult;
	char *errmsg;
	int nRow, nColumn;
    int i,rc;

    sql_mtx.lock();
    while(1)
    {
        rc = sqlite3_open(sqlpath, &db);
        if( rc != SQLITE_OK )
        {
            fprintf(stderr, "station select database: %s\n", sqlite3_errmsg(db));
            usleep(SLEEPTIME);
            continue;
        }
        char route_sql[256];
        sprintf(route_sql,"select interval from station where route='%s'",line_name);
        rc = sqlite3_get_table( db, route_sql, &dbResult, &nRow, &nColumn, &errmsg);
        if (rc == SQLITE_OK)
        {
            for( i = 1; i < nRow ; i++ )
            {
                //lock
                list_station.push_back(dbResult[i]);
                //lock
            }
        }
        else
        {
            sqlite3_close(db);
            usleep(SLEEPTIME);
            continue;
        }
        sqlite3_free_table(dbResult);
        sqlite3_close(db);
        usleep(SLEEPTIME);
        break;
    }
    sql_mtx.unlock();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值