Используя пользовательский ввод, чтобы определить, сколько раз цикл for повторяется

Это сильно зависит от того, что program1. Программное обеспечение должно иметь возможность обрабатывать (или игнорировать) сигнал SIGPIPE. program1 будет отвечать за обработку ошибки - если программное обеспечение является открытым исходным кодом, вы должны понимать, что происходит, или если оно ловушки / обнаруживает сигнал SIGPIPE. Если программное обеспечение не делает ничего особенного с потоками, оно, скорее всего, завершит выполнение перед передачей результатов. Я попытался сделать небольшой пример, чтобы показать точку, используя два сценария php.

program1

#!/usr/bin/env php
<?php

@unlink('program1.out');

for( $i = 0; $i < 10; $i++ )
{
    // This goes to either the buffer or whoever is next in the pipe
    echo $i . PHP_EOL;
    // Put everything in a file so we can see what Program1 actually did
    file_put_contents('program1.out', $i . PHP_EOL, FILE_APPEND);   
}

// All done! Cap off the file
file_put_contents('program1.out', 'Fin', FILE_APPEND);

program2

#!/usr/bin/env php
<?php

// We're taking inputs and just redirecting them to program2.out
// but to make it fun I'll throw an error half way through
// because I'm malicious like that

@unlink('program2.out');

$pipe_input = file("php://stdin");
$pipe_total = count($pipe_input);
$stop = rand(0, $pipe_total - 1);

echo "I'll be stopping at $stop" . PHP_EOL;

foreach( $pipe_input as $key => $input )
{
    if( $key == $stop )
    {
        file_put_contents('program2.out', 'Dead!', FILE_APPEND);
        die(1);
    }

    file_put_contents('program2.out', $input, FILE_APPEND);
}

Когда вы выполняете ./program1 | ./program2, вы Я получаю два файла .out по одному для каждой программы. В приведенном примере я получил следующие файлы:

0
1
2
3
4
5
6
7
8
9
Fin

И для program2.out

0
1
2
3
4
Dead!

Первая программа выполнит и передаст ее содержимое ко второму. Вы заметите, что файл .out-файла первой программы имеет полный набор чисел, а второй содержит только набор из них, потому что он был убит.

1
задан 24 December 2015 в 12:54

0 ответов

Другие вопросы по тегам:

Похожие вопросы: