Следующий процесс приводит к разному поведению в Mac OS и Ubutu:
cat some_text_file | xargs a_shell_script.sh
a_shell_script.sh
#!/bin/bash
echo "$@" | telnet 127.0.0.1 123
exit 0
TCP-сервер, прослушивающий порт 123, настроен на обработку содержимого some_text_file. В моей реализации этого процесса в Ubuntu длина ввода, который получает TCP-сервер, равна длине some_text_file. Однако в моей реализации в OSX — это меньшая часть длины, т. е. ввод каким-то образом обрезается.
Примечание: Насколько я могу судить, это не проблема xargs. Количество $#
доступных args ( ) a_shell_script.sh
одинаково в обеих реализациях.
Спасибо!
решение1
Не зная достаточно о реализации, я могу только предположить, что ваш процесс на стороне прослушивания не зацикливается на recv(2)
сокет, а только читает один раз. Тот факт, что вы получаете все сразу в Ubuntu и не получаете в OS X, вероятно, связан с реализацией стека TCP в двух системах, но это не то, что должно иметь значение; вместо этого код на стороне приема должен опрашивать сокет и считывать данные по мере их доступности.
Проверьте вызовы socket(2)
и recv(2)
, и, возможно, опубликуйте какой-нибудь код, если считаете, что это поможет.