Musiałem przekazać stdin nadrzędnego procesu C ++ do skryptu, który uruchamia, i zwrócić standardowe wyjście wykonywanego skryptu z powrotem do procesu C ++. Nie ma problemu z wyjściem standardowym, robię to z funkcją popen, ale jak mogę sprawić, by skrypt php zobaczył stdin procesu, który go uruchamia?

Co ja robię źle?

//This is c++:
int main()
{
string ref = "php7.2 /home/anton/test.php";
FILE* pipe;
char buf[1024];
string REQ = "123456";
fputs(REQ.c_str(), stdin);
if(!(pipe = popen(ref.c_str(), "r")))
std::cerr « "Error creating a pipe" « std::endl;

while(fgets(buf, 1023, pipe))
{
std::cout « buf;
}
pclose(pipe);
return 0;
}




//php script
<?php
$a;
parse_str(file_get_contents("php://stdin"), $a);
echo a;
?>
0
BERTOLDO 17 grudzień 2019, 00:03
Należy pamiętać, że C i C++ to różne języki i rozwiązania mogą się różnić. Użyj tylko odpowiedniego znacznika języka.
 – 
kaylum
17 grudzień 2019, 00:10

1 odpowiedź

Sprawdź funkcję pipe () i zobacz, czy robi to, co chcesz. Użyj dup2, aby przekierować stdin na koniec zapisu potoku.

-1
eric 17 grudzień 2019, 00:20