почему тот же вывод возвращается, когда popn () вызывает снова и снова

0

Я пытаюсь привести пример

#include <boost/thread.hpp>
#include <boost/thread/condition.hpp>
#include <iostream>

#include <string>
#include <stdio.h>

std::string exec(char* cmd, boost::uint16_t *piOutVid, boost::uint16_t *piOutPid) {
    boost::uint16_t uint_pid;
    boost::uint16_t uint_vid = 0x05e0;
    piOutVid = &uint_vid;

    FILE* pipe1 = popen(cmd, "r");
    if (!pipe1) return "ERROR";
    char buffer[128];
    unsigned int value;
    std::string result = "";
    while(!feof(pipe1)) {
        if(fgets(buffer, 128, pipe1) != NULL)

            if(strncpy(buffer, "1300", 4))
            {
                uint_pid = 0x1300;
                std::cout << "value: " << buffer << std::endl;
            }
            else if(strncpy(buffer, "1900", 4))
            {
                uint_pid = 0x1900;
                std::cout << "value: " << buffer << std::endl;
            }
            else if(strncpy(buffer, "0820", 4))
            {
                uint_pid = 0x0820;
                std::cout << "value: " << buffer << std::endl;
            }

            result += buffer;
    }
    pclose(pipe1);
    buffer[127] = '\0';


    return result;
}

int main()
{
    boost::uint16_t *piOutVid;
    boost::uint16_t *piOutPid;
    std::cout << "Boost threading..." << std::endl;
    //boost::thread *nwThread = new boost::thread(boost::bind(class::method, this));
    char *cmd = "lsusb|grep 'Symbol'|cut -d \":\" -f 3|cut -d \" \" -f 1";
    exec(cmd, piOutVid, piOutPid);

}

при первом запуске этой программы. он работал правильно, но повторное использование программы работает неправильно. Сначала я тестирую устройство (PID = 1300), затем удаляю его и подключаю новое устройство (PID = 0820) и снова запускаю программу. Но все равно давайте такую же производительность ниже.

Boost threading...
value: 1300

Process returned 0 (0x0)   execution time : 0.059 s
Press ENTER to continue.

pclose() возвращает 0

  • 1
    Вы неправильно strncmp как strncpy .
  • 1
    Пожалуйста, удалите свой вопрос; это не основано на глупой опечатке и поэтому не представляет ценности для будущих посетителей.
Теги:
popen
pclose

1 ответ

1
Лучший ответ

Операторы if основаны на результате strncpy, который всегда возвращает адрес памяти destination. Поэтому по определению, если копия завершается успешно, она всегда возвращает значение, которое оценивается как true. И, таким образом, всегда 0x1300 свой блок 0x1300.

Вы strcmp виду использовать strcmp?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню