← All posts tagged CPP

SkyLimited

Жуйк, расскажи мне, что я делаю не так.
внутри класса вызов
const std::string cmd = "netstat -atun";
std::string res = exec(cmd.c_str());

Сама функция вне класса объявлена
std::string exec(const char* cmd) {
FILE* pipe = popen(cmd, "r");
if (!pipe)
return "ERROR";
char buffer[128];
std::string result = "";
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}

Суть в том, что все виснет на fgets. Мертво.

SkyLimited

Так вот, к вопросу о простешей задаче получить список открытых портов. @vt был весьма прав — банально нужно ходить по proc/xxx/net/tcp{,6} и парсить его. Вариант второй, более быстрый и предпочтительный юзать netlink-сокет.
Но больше всего меня порадовали эти вещи:
1. Информацию в гугле о программировании под Linux найти в разы труднее, чем под WinAPI
2. Интернет просто завален заметками вида "Как сделать %Subj% в Ubuntu". Нет, он просто засран этим говном. Каждый сраный школьник выучивший новую команду бежит в блог, чтобы поделиться этим сакральным знанием.
3. Столько много народу рассказывает о ценности открытых исходников, а по факту какой-нибудь срач винда vs linux собирает в разы больше приверженцев, чем просто технический вопрос.