Msg ��� ������� linux

Msg ��� ������� linux

int recv(int s , void * buf , size_t len , int flags );

int recvfrom(int s , void * buf , size_t len , int flags , struct sockaddr * from , socklen_t * fromlen );

int recvmsg(int s , struct msghdr * msg , int flags );

ОПИСАНИЕ

Если параметр from не равен NULL , а сокет не является ориентированным на соединения, то адрес отправителя в сообщении не заполняется. Аргумент fromlen передается по ссылке, в начале инициализируется размером буфера, связанного с from , а при возврате из функции содержит действительный размер адреса.

Вызов recv обычно используется только на соединенном сокете (см. connect (2)) и идентичен вызову recvfrom с параметром from , установленным в NULL .

Все три функции возвращают длину сообщения при успешном завершении. Если сообщение слишком длинное и не поместилось в предоставленный буфер, лишние байты могут быть отброшены, в зависимости от типа сокета, на котором принимаются сообщения (см. socket (2)).

Если на сокете не доступно ни одного сообщения, то обсуждаемые функции ожидают их прибытия, если сокет не помечен как неблокирующий (см. fcntl (2)), в противном случае возвращается значение -1, а внешняя переменная errno устанавливается в значение EAGAIN . Все эти функции обычно возвращают уже доступные данные вплоть до запрошенного объема, и не ждут, пока появятся данные полной запрошенной длины.

Системные вызовы select (2) или poll (2) можно использовать для определения появления новых данных.

Аргумент flags системного вызова recv формируется с помощью объединения логической операцией ИЛИ одного или более нижеследующих значений: MSG_OOB Этот флаг запрашивает прием внепотоковых данных, которые в противном случае не были бы получены в обычном потоке данных. Некоторые протоколы помещают данные повышенной срочности в начало обычной очереди данных, и поэтому этот флаг не может использоваться с такими протоколами. MSG_PEEK Этот флаг заставляет выбрать данные из начала очереди, но не удалять их оттуда. Таким образом, последующий вызов функции вернет те же самые данные. MSG_WAITALL Этот флаг просит подождать, пока не придет полное запрошенное количество данных. Однако, этот вызов все равно может вернуть меньше данных, чем было запрошено, если был пойман сигнал, произошла ошибка или разрыв соединения, или если начали поступать данные другого типа, не того, который был сначала. MSG_TRUNC Возвращает реальную длину пакета, даже если она была больше, чем предоставленный буфер. Этот флаг можно использовать только с пакетными протоколами. MSG_ERRQUEUE Получить пакет из очереди ошибок. MSG_NOSIGNAL Этот флаг отключает возникновение сигнала SIGPIPE на потоковых сокетах, если другая сторона вдруг исчезает. MSG_ERRQUEUE Указание этого флага позволяет получить из очереди ошибок сокета накопившиеся ошибки. Каждая ошибка передается во вспомогательном сообщении, чей тип зависит от протокола (для IPv4 этим типом является IP_RECVERR ). Пользователь должен предоставить буфер достаточной длины. См. cmsg (3) и ip (7), где приведена дополнительная информация. Содержимое исходного пакета, который привел к ошибке, передается в виде обычных данных с помощью msg_iovec . Исходный адрес назначения датаграммы, которая вызвала ошибку, передается с помощью msg_name . Для локальных ошибок адрес не передается (это можно выяснить, проверив поле cmsg_len структуры cmsghdr ). Для ошибок при приеме в msghdr устанавливается MSG_ERRQUEUE . После того, как ошибка передана программе, следующая ошибка в очереди ошибок становится ожидающей ошибкой и передается программе при следующей операции на сокете.

Читайте также:  Команда sudo для windows

Ошибка хранится в структуре sock_extended_err : ee_errno содержит значение errno для ожидающей ошибки. ee_origin источник происхождения ошибки. Смысл остальных полей зависит от протокола. SOCK_EE_OFFENDER возвращает указатель на адрес сетевого объекта, породившего ошибку. Если этот адрес неизвестен, то член sa_family структуры sockaddr содержит значение AF_UNSPEC , а прочие поля структуры не определены. Содержимое пакета, вызвавшего ошибку, передаются в виде обычных данных. Для локальных ошибок адрес не передается (это можно проверить, взглянув на член cmsg_len структуры cmsghdr ). При приеме ошибок в структуре msghdr установлен флаг MSG_ERRQUEUE . После того, как ошибка была передана, следующая в очереди ошибка используется для перегенерации ошибки сокета, и именно она будет возвращена при следующей операции с этим сокетом.

Системный вызов recvmsg использует структуру msghdr для того, чтобы минимизировать количество непосредственно передаваемых параметров. Эта структура определена в так:

Здесь msg_name и msg_namelen задают адрес назначения, если сокет не соединен; в параметре msg_name можно передать NULL , если имена не требуются или вообще нежелательны. Поля msg_iov и msg_iovlen описывают точки scatter-gather, что обсуждается в readv (2). Поле msg_control , имеющее длину msg_controllen , указывает на буфер для других сообщений, связанных с управлением протоколов, или на буфер для разнообразных вспомогательных данных. Когда вызывается recvmsg , в параметре msg_controllen должна находиться длина доступного буфера, чей адрес передается в msg_control ; при успешном завершении в этом параметре будет находиться длина последовательности контрольных сообщений.

Сообщения имеют такую форму:

К вспомогательным данным нужно обращаться только с помощью макросов, определенных в cmsg (3).

Например, Linux использует этот механизм вспомогательных данных для того, чтобы передавать через Unix-сокеты расширенные ошибки, флаги IP и файловые дескрипторы.

Поле msg_flags в msghdr устанавливается при возврате из recvmsg (2). Оно может содержать несколько флагов: MSG_EOR означает «конец записи»: возвращенные данные заканчивают запись (обычно используется вместе с сокетами типа SOCK_SEQPACKET ). MSG_TRUNC означает, что хвостовая часть датаграммы была отброшена, потому что датаграмма была больше, чем предоставленный буфер. MSG_CTRUNC означает, что часть управляющих данных была отброшена из-за недостатка места в буфере вспомогательных данных. MSG_OOB возвращается для индикации получения внепотоковых данных. MSG_ERRQUEUE означает, что были получены не данные, а расширенное сообщение об ошибке из очереди ошибок сокета. MSG_DONTWAIT Разрешает неблокирующий режим. Если операция могла бы привести к блокировке, возвращается EAGAIN (этот режим можно также включить с помощью O_NONBLOCK и функции F_SETFL системного вызова fcntl (2)).

Источник

Работа с «плохими» файлами в командной строке в Linux

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

В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.

Ситуации могут быть разными. В текущей директории могут быть файлы, которые нужно удалить вместе с теми, которые нужно оставить. Имена у них могут быть самыми разными. Причем первые от последних могут отличаться только одним каким-нибудь заковыристым символом.

Читайте также:  Загрузочные драйвера под windows

В названии файла есть служебный символ bash

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

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

С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.

Имя файла начинается с дефиса

Удалить файл, начинающийся с дефиса простым экранированием не получится, и команда rm будет воспринимать дефис, как начало своего аргумента. Решить проблему довольно просто:

Удаляем по wildcard

Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:

Файлы с управляющим символом в названии

В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:

Другим способом удаления таких файлов являяется ввод управляющего символа с клавиатуры. Для этого нужно воспользоваться комбинацией клавиш, которая экранирует следующий введенный символ, тем самым запрещая системе обрабатывать его. Как правило, эта комбинация CTRL+V. Точно убедиться в этом можно с помощью команды stty -a, посмотрев на параметр lnext. Удалим файл, содержащий символ ESC:

Удаление файлов с символами utf8

Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.

Перекодировка имени файла

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

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

Также можно воспользоваться сторонними программами, которые попытаются распознать кодировку автоматически. Например, онлайн-декодер Лебедева.

Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.

Автокомплит

В случае, если в директории название требуемого файла начинается уникально, и это название можно однозначно сформировать автокомплитом, то это довольно простой способ удалить файл:

Удаляем файл через меню выбора

Если мы дошли сюда, дело плохо. Попробуем удалить конкретный файл, составив для этого меню выбора. В итоге, все что нам останется сделать – это выбрать нужный пункт меню вместо ввода имени файла. Для этого нам нужно запрограммировать действие, которое будет происходить с файлом или файлами после ввода нами нужных пунктов меню.

Удаление по номеру inode

Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.

Удаление по hex-коду

И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.

Читайте также:  Корневая система mac os

Хорошо, все-таки, что на практике такие файлы попадаются нечасто.

Источник

MSG – чем открыть? Простой и бесплатный способ.

Впрочем, msg-файлы обрабатываются не только почтовыми клиентами Microsoft, но и некоторыми другими популярными программами, например, Pegasus Mail или The Bat. Файлы с таким расширением относятся к текстовым файлам всем известного формата doc, но, помимо текста, могут содержать и другие элементы: дату, получателя, отправителя, тему сообщения, приложения и т.д. Если вы постоянно пользуетесь почтовыми клиентами для ведения деловой или личной переписки, то наверняка имеете дело с msg-файлами, даже сами того не зная.

На первый взгляд кажется, что открыть MSG файл легко : раз msg-файлы обрабатываются различными почтовыми клиентами, то нужно просто импортировать сообщение в соответствующую программу и открыть его там. А если ни один из почтовых клиентов, использующих данный формат, не установлен на вашем компе? Вам действительно хочется разбираться в почтовых программах и способах импортирования и, чего доброго, устанавливать новое ПО? Или вам нужно просто открыть письмо?

С другой стороны, можно сконвертировать msg в понятный txt-файл , который легко открывается при помощи того же Блокнота MS Windows. Только вот для начала придется поискать соответствующий конвертер, что уже не так легко и совсем не быстро. Тем более что при такой конвертации часть данных (например, вложения) может оказаться недоступной для просмотра.

И что делать? Для себя я этот вопрос решил раз и навсегда, взяв на вооружение простую и очень удобную программу Coolutils Mail Viewer, специально разработанную для просмотра электронных сообщений в формате msg . Программка совершенно бесплатная, скачивается за минуту, понятна даже такому «чайнику», как я, и справляется со своей задачей на все 100: мгновенно открывает msg-файлы со всеми приложениями и прочими данными.

В ней даже можно перемещать, удалять, копировать сообщения и создавать отчеты в других форматах (TXT, PDF, XLSX, CSV, HTML).

И что приятно – никакой навязчивой рекламы и лишних инструментов, да и вирус подхватить невозможно, качая программу прямо с сайта разработчика. Надеюсь, мой опыт поможет вам сэкономить деньги, время и нервы, и ваши MSG сообщения будут открываться по одному клику!

Источник

MSG – Сообщение электронной почты (Outlook Mail Message)

Расширение MSG

Чем открыть файл MSG

В Windows: Microsoft Outlook, Encryptomatic MsgViewer Pro, BitDaddys Email Open View Pro, EZ Freeware Free Opener, Pegasus Mail, Aid4Mail, PMMail, The Bat!, MDaemon
В Mac OS: Kupon.BG Klammer, 45RPM MailRaider
В Apple iOS (iPhone, iPad, iPod): Kupon.BG Klammer 3

Описание расширения MSG

Популярность:

Разработчик: Microsoft

Расширение MSG – это сохраненное электронное почтовое сообщение. Основной программой является Microsoft Outlook, но так же используется и в Windows Mail, The Bat!, MDaemon и т.д. Содержит различные поля электронного сообщения, включая дату, данные об отправителе, получателе, тему, сообщение и вложение. Файл *.MSG может содержать как только текст ASCII для заголовков и основного тела сообщения, так и полностью сообщение с картинками и другими элементами в формате HTML. Как правило вложения встроены в MSG файл в кодировке base64. Кодирование применяется для того, чтобы вложения пропустили почтовые сервера, которые изначально работают только с текстом. Для открытия MSG файлов необходимо использовать программу, в которой файл был сохранен и желательно той же версии. Так же можно попробовать переименовать расширение MSG в расширение EML и открыть в Outlook Express.

Расширение .MSG также использовалось в старой почтовой программе OzWin в операционной системе MS-DOS.

Источник

Оцените статью