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

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

#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

0

Решение

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

Вы хотели использовать strcmp?

1

Другие решения


По вопросам рекламы [email protected]