source of highlighter
plain | download
    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 }