Я соглашаюсь, что все ответы до сих пор корректны, но вот причина. C Microsoft и компиляторы C++ предоставляют различные соглашения о вызовах для (намеченной) скорости вызовов функции в и функциях C++ приложения C. В каждом случае вызывающая сторона и вызываемый должны договориться который соглашение о вызовах использовать. Теперь, сам Windows обеспечивает функции (API), и они были уже скомпилированы, поэтому когда Вы называете их, необходимо соответствовать им. Любые вызовы к Windows APIs и обратные вызовы из Windows APIs, должны использовать __ stdcall конвенция.
Из раздела «Обоснование» справочной страницы UNIX для xargs
. (Интересно, что этот раздел не появляется ни в версии OS X BSD xargs
, ни в версии GNU.)
Классическое приложение xargs утилита в сочетании с найти утилиту для уменьшения количества процессы, запущенные упрощенным использованием комбинации find -exec. В Утилита xargs также используется для обеспечения верхний предел памяти, необходимый для запустить процесс. На этой основе в Обратите внимание, этот том POSIX.1-2008 выбраны только минимальные функции требуется.
В дальнейшем вы спрашиваете, сколько вилок будет у другой версии. Джим уже ответил на этот вопрос : по одному на итерацию. Сколько существует итераций? Точное число назвать невозможно, но на общий вопрос легко ответить. Сколько строк в вашем файле url-list.txt?
Есть и другие соображения. xargs
требует особого внимания к именам файлов с пробелами или другими запрещенными символами, а -exec
имеет параметр ( +
), который группирует обработку в пакеты. Итак, не все предпочитают xargs
, и, возможно, это не лучший вариант для всех ситуаций.
См. Эти ссылки:
Также рассмотрите:
xargs -I'{}' wget -c '{}' < url-list.txt
но wget предоставляет еще лучшие средства для того же:
wget -c -i url-list.txt
Что касается рассмотрения xargs по сравнению с циклом, я предпочитаю xargs, когда значение и реализация относительно " просто "и" ясно ", в противном случае я использую циклы.
xargs
предназначен для обработки нескольких входных данных для каждого процесса, который он разветвляет. Сценарий оболочки с циклом for
по входам должен разветвлять новый процесс для каждого входа. Избежание этих накладных расходов на процесс может дать решению xargs
значительное повышение производительности.
Одно преимущество, о котором я могу думать, заключается в том, что если у вас много файлов, это может быть немного быстрее, так как у вас не так много накладных расходов от запуска новых процессов.
Я не совсем эксперт по bash. , так что могут быть другие причины, по которым так лучше (или хуже).
xargs также позволит вам иметь огромный список, что невозможно с версией "for", поскольку оболочка использует командные строки ограниченной длины.
В зависимости от вашего интернет-соединения вы можете использовать GNU Parallel http://www.gnu.org/software/parallel/ для параллельного запуска.
cat url-list.txt | parallel wget -c