Является ли текстовый файл больше в Windows, чем в Linux, из-за возврата каретки?

[root@xxx:~]# telnet 10.49.46.2
Trying 10.49.46.2...
Connected to 10.49.46.2.
Escape character is '^]'.

Это означает, что вы успешно установили TCP-соединение с удаленным демоном. Какой демон? Тот xinetd, который служит концентратором. Теперь, когда вы подключены, xinetdпытается запустить конкретную службу (telnet).

Connection closed by foreign host.

Это означает, что не удалось запустить службу telnet. Вы можете добавить параметры отладки в командную строку telnetdи прочитать журналы xinetd, чтобы увидеть, что именно не удалось.


Похоже, вы используете BusyBox версии telnetd. В отличие от классических версий telnetd, тот, который поставляется вместе с Busybox, представляет собой автономный демон, которому требуется опция -iдля взаимодействия сinetd(службами, запускаемыми inetdимеют особый интерфейс, несовместимый с автономным демоном :они не должны открывать и прослушивать сокеты, они должны взаимодействовать с клиентом через stdin/stdout ).

Таким образом, ваша xinetdконфигурация должна быть:

service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/telnetd
        server_args     = -i
        log_on_failure  += USERID
        instances       = 10
        disable         = no
}
-1
07.09.2020, 12:08
2 ответа

Ваш тест верен, хотя, строго говоря, ограничен — он только показывает, что в Linux строки, созданные вашими командами echo, занимают соответственно 14 и 17 байт, как измеряется wc --bytes. Каждые \nи \rзанимают один байт, поэтому каждая новая строка подвергается штрафу в один -байт при использовании новой строки в стиле DOS/Windows -.

Строго говоря, требования к объему памяти зависят от программы, которую вы используете для записи файла; ни Linux, ни Windows ничего не навязывают содержимому файла. Можно хранить файлы с новыми строками CRLF в Linux и файлы с новыми строками LF в Windows. Чтобы определить требования к хранилищу вашего файла в любой операционной системе, вы должны написать его, используя любой инструмент, который вы собираетесь использовать, в обеих операционных системах, и измерить размер файла с помощью инструментов операционной системы.

Обратите внимание, что файлы обычно используют хранилище, кратное определенной единице хранения, поэтому изменение, связанное с новыми строками, может не иметь практического значения.

5
18.03.2021, 23:06

Возможно.

Windows вполне способна хранить любые двоичные файлы без какой-либо специальной обработки символов CR и LF --, в противном случае никакие двоичные файлы не будут работать. Но в программах Windows принято хранить новые строки в виде пар CR+LF, в отличие от Unixen, где принято просто использовать LF. Этот обычай может быть кодифицирован и в системных библиотеках, но я не прикасался к программированию Windows целую вечность, так что мне нечего сказать.

Однако это еще не все... Если вы откроете даже просто Блокнот и начнете сохранять файл, вы столкнетесь с некоторыми параметрами формата. В системе, которая была у меня под рукой, варианты были «ANSI», «Unicode» и «UTF -8».Я создал файл с содержимым foo⏎bar⏎doo⏎(, где — перевод строки ), а результирующие размеры файлов составили 15, 32 и 18 байт соответственно.

Первый из них просто foo\r\nbar\r\ndoo\r\n, сохраненный в кодовой странице Windows -1252, хотя с этими символами это не имеет значения. äбудет храниться здесь как один байт. Второй — UTF -16 (или UCS -2? ), так что два байта на символ плюс два -байта byte -метка заказа (BOM ). Символы включают CR и LF, поэтому всего 15 символов плюс спецификация, что составляет 32 байта. Третий, UTF -8, такой же, как и первый, за исключением того, что префикс спецификации в кодировке UTF -8 добавляет к тексту три байта. В UTF -8 ä— это два символа. Что ж, после написания этого я заметил, что вы упомянули «текстовый файл ASCII», но различия между кодировками показывают, что приложения могут писать в файл все, что хотят.

Я ожидаю, что если я возьму, например,. Cygwin Bash под Windows и запустить echo -e 'foo\nbar\ndoo\n', я бы получил только эти 12 байтов, без байтов CR. Точно так же любой текстовый редактор в Windows может хранить файлы только с LF для новой строки.

Так что, на самом деле, это зависит от того, какую программу вы используете для создания файла и в каком формате хотите сохранить файл.

0
18.03.2021, 23:06

Теги

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