The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.66"
Отправлено Проходил мимо, 20-Дек-22 07:27 
> А почему бы не выделить нужную память вектором Vec<u8> или Box<[u8]>?

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


    fn  read_data_block(&mut self)-> Option<usize>
    {
        let mut r : Option<usize> = None;
        //  Флаг повторного считывания даных в случае, если функция была
        //  прервана сигналом (ErrorKind::Interrupted)
        let mut read_flag = true;

        while   read_flag
        {
            //  Мы используем внутренний буфер вектора как мутабельный слайс
            match   self.data_src.read(&mut self.buf.as_mut_slice())
            {
                //  В случае успеха возвращает количество считанных байт
                Ok(n)  =>
                {
                    //  Повторное считывание не требуется
                    read_flag = false;
                    //  Установим новое количество байт в векторе, так как
                    //  он сам ничего не знает о том, что в него были
                    //  считаны данные извне
                    //  Эта операция считается небезопасной, поэтому
                    //  используем unsafe блок
                    unsafe
                    {
                        self.buf.set_len(n);
                    }
                    //  Подготовим возвращаемый результат
                    if n > 0 { r = Some( n ); }
                },
                Err(e) =>
                {
                    if e.kind() != ErrorKind::Interrupted
                    {
                        read_flag = false;
                        self.io_error = Some( e.kind() );
                    }
                }
            }
        }
        //  Вернем результат считывания
        r
    }


Он требует доработки, чтобы еще была правильно обработана ошибка обрыва Пипы, но, в целом, вполне рабочая.
 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру