2

Следующий процесс приводит к различному поведению в 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. Количество аргументов ($#), доступных для a_shell_script.sh , одинаково в обеих реализациях.

Спасибо!

1 ответ1

2

Не зная достаточно о реализации, я могу только предположить, что ваш процесс на конце прослушивания не зацикливается на recv(2) из сокета, а только читает один раз. Тот факт, что вы получаете все сразу в Ubuntu, а в OS X - нет, вероятно, связан с реализацией стека TCP в двух системах, но это не имеет значения; вместо этого код на принимающей стороне должен опрашивать сокет и считывать данные как доступные.

Проверьте вызовы socket(2) и recv(2) и, возможно, опубликуйте некоторый код, если считаете, что это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .