кошачий файл | & Hellip; против & hellip; < файл

Допустим, ваш массив букв выглядит так: «ABCDEFGH». У вас есть три индекса (i, j, k), указывающие, какие буквы вы собираетесь использовать для текущего слова. Вы начинаете с:

A B C D E F G H
^ ^ ^
i j k

Сначала вы меняете k, поэтому следующий шаг выглядит так: :

A B C D E F G H
^ ^   ^
i j   k

Если вы достигли конца, вы продолжаете и меняете j, а затем k.

A B C D E F G H
^   ^ ^
i   j k

A B C D E F G H
^   ^   ^
i   j   k

Как только вы достигнете G, вы также начнете меняться.

A B C D E F G H
  ^ ^ ^
  i j k

A B C D E F G H
  ^ ^   ^
  i j   k
...
function initializePointers($cnt) {
    $pointers = [];

    for($i=0; $i<$cnt; $i++) {
        $pointers[] = $i;
    }

    return $pointers;     
}

function incrementPointers(&$pointers, &$arrLength) {
    for($i=0; $i

На основе https://stackoverflow.com/a/127898/2628125 , но более абстрактным для любого размера указателей.

16
задан namin 31 March 2010 в 11:21
поделиться

5 ответов

При чтении из обычного файла cat отвечает за чтение данных, выполняет их по своему усмотрению и может ограничивать их способ записи в конвейер. Очевидно, что само содержимое сохранено, но все остальное может быть испорчено. Например: размер блока и время прибытия данных. Кроме того, канал сам по себе не всегда нейтрален: он служит дополнительным буфером между входом и ... .

Быстрый и простой способ сделать проблему размера блока очевидной:

$ cat large-file | pv >/dev/null
5,44GB 0:00:14 [ 393MB/s] [              <=>                                  ]
$ pv <large-file >/dev/null
5,44GB 0:00:03 [1,72GB/s] [=================================>] 100%
11
ответ дан 30 November 2019 в 21:10
поделиться

Кроме того вещь, опубликованная другими пользователями, при использовании перенаправления ввода из файла стандартным вводом является файл, но при передаче вывода cat на ввод стандартный ввод представляет собой поток с содержимым файла. При стандартном вводе файл сможет выполнять поиск внутри файла, но канал не позволяет этого. Вы можете убедиться в этом, найдя zip-файл и выполнив следующие команды:

zipinfo /dev/stdin < thezipfile.zip

и

cat thezipfile.zip | zipinfo /dev/stdin

Первая команда покажет содержимое zip-файла, а вторая покажет ошибку, хотя это вводящая в заблуждение ошибка, потому что zipinfo не позже проверьте результат вызова поиска и ошибки.

4
ответ дан 30 November 2019 в 21:10
поделиться

Каналы вызывают вызов подоболочки для команды справа. Это мешает переменным среды.

cat foo | while read line
do
  ...
done
echo "$line"

против

while read line
do
  ...
done < foo
echo "$line"
2
ответ дан 30 November 2019 в 21:10
поделиться

cat file | запускает другую программу (cat), которая не должна запускаться во втором случае. Это также сбивает с толку, если вы хотите использовать «здесь документы». Но он должен вести себя так же.

1
ответ дан 30 November 2019 в 21:10
поделиться

cat позволит вам последовательно передать несколько файлов. В противном случае перенаправление < и cat file | дают одинаковые побочные эффекты.

5
ответ дан 30 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

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