倒腾cups接口时遇到的一个问题

int operateCmd(char *cmd)
{
    int ret = 0;
    int retval = 0;
    FILE *fp = NULL;
    char buffer[MAX_BUFFER_SIZE] = {0};
    do {
        fp = popen(cmd, "r");
        if (fp == NULL) {
            ret = errno;
            break;
        }
        while (fgets(buffer, sizeof(buffer), fp))
            ;
        retval = pclose(fp);
        if (WIFEXITED(retval)) {
            ret = WEXITSTATUS(retval);
        }
        else {
            ret = -1;
        }
    } while (0);

    return ret;
}

int main(int argc, char** argv) 
{

    // 代码1
    operateCmd("systemctl restart cups"); 


    // 代码2
    cups_dest_t *dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, "xxxxxx(打印机名字)", NULL);
    if(NULL == dest) {
        std::cout << "[ERROR] HGPTR is not installation." << std::endl; 
        return 1;
    }
    cupsFreeDests(1, dest); 

    return 0;
}

代码1和代码2同时存在的情况下,代码1执行完毕后,执行代码2时,速度非常慢,,,大概有几十秒。。。
注释代码1后,只执行代码2,此时正常,,,,

解决方案
在代码1后面延时 1-2秒左右, 此时正常。。。

思考???
为什么会出现此种现象,,,代码1就是重启 cups而已。。。
并且它是正常执行完并且启动成功了的。。。
然后立马执行代码2,,,此时便非常缓慢。
按理说不应该产生此类现象啊。。。
初步怀疑,,重启cups时,可能需要占用一些文件或其他资源,,此时紧接着执行代码2,,可能产生一些获取资源的冲突等待。。。。
但是,看了cupsGetNamedDest()源码,,,也没看出什么抢占资源型的问提。。。。
待后探索研究吧。。。

你可能感兴趣的:(杂七乱八,cups,linux)