Я пытаюсь ниже пример
#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
Ваш if
заявления основаны на результате strncpy
, который всегда возвращает адрес памяти destination
, Таким образом, по определению, если копия завершается успешно, она всегда будет возвращать значение, которое оценивается как true
, И, таким образом, всегда бить 0x1300
блок.
Вы хотели использовать strcmp
?