У меня есть функция, в которой я вызываю _open несколько раз.Когда звонить _pclose?
Если _popen
возвращает NULL
, мне нужно позвонить _pclose
перед тем, как функция вернется?
Я отметил 3 местоположения, где, как мне кажется, должно быть вызвано _pclose
.
В каком из этих мест я должен позвонить _pclose
?
bool theFunction()
{
FILE* pPipe;
char buffer[1000];
if((pPipe = _popen("dir", "rt")) == NULL)
{
//location 1
_pclose(pPipe);
return false;
}
while(fgets(pipeBuffer, maxBufferSize, pPipe))
{
printf(pipeBuffer);
}
if((pPipe = _popen("cls", "rt")) == NULL)
{
//location 2
_pclose(pPipe);
return false;
}
//location 3
_pclose(pPipe);
return true;
}
Вы не можете закрыть все, что не удалось открыть. Посмотрите на свой первый пример, вы пытаетесь закрыть 'NULL'. –
Подумайте об этом с точки зрения '_pclose()' ... если вы передали его 'NULL', как он мог знать, что закрыть? – FatalError
Хорошо, извините, если это показалось мне плохим. Хотя я понял, что pPipe - это «Null» в этих точках, я новичок в трубах и этих командах. Я спросил, потому что я хотел убедиться, что в '_pclose' ничего не было очищено. Спасибо за быстрый ответ. – user3731622