1 <?php 2 if (sizeof($argv) < 2) { 3 $_d = scandir("/proc/self/fd"); 4 list($s1, $s2) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0); 5 6 $pid = pcntl_fork(); 7 if ($pid == -1) 8 die("nejde fork\n"); 9 10 if (!$pid) { 11 fclose($s1); 12 $fd = array_values(array_diff(scandir("/proc/self/fd"), $_d))[0]; 13 14 // ako prvy argument programu ./a poviem cislo suboroveho deskriptoru 15 // s ktorym so mnou moze komunikovat (je to cislo socketstreamu $s2, 16 // ale bohuzial som nezistil, ako v php rozumne zistim cislo suboroveho 17 // deskriptoru socketstreamu, tak som to musel urobit takou drbnutou 18 // oklukou ako je vidiet na riadkoch 3 a 12 - funguje to iba na linuxoch) 19 pcntl_exec("./a", [$fd]); 20 exit(0); 21 } 22 fclose($s2); 23 24 // dcersky proces mi povie kam sa mam pripojit pri druhom volani 25 echo "pripoj sa na ".fread($s1, 100)."\n\n"; 26 27 fclose($s1); 28 } else { 29 $s = stream_socket_client("unix://".$argv[1]); 30 echo fread($s, 100); 31 }