Ошибка попытка послать бинарный файл

Linux (видео уроки) Обзор Linux видео уроки 1. Введение в ОС Linux/Unix Ubuntu. Видео linux уроки 2017 года. gnu linux operating system. Linux администрирование и linux уроки, linux скачать. To linux distros for 2017 and обзор linux mint 18 1.

Linux mint 19.1 (скачать) Развиваемый сообществом дистрибутив Linux mint, основанный на Ubuntu и Debian, который ставит целью предоставить пользователю «современную, элегантную и удобную операционную систему, которая одновременно является мощной и

Стала доступна для скачивания финальная версия Linux Mint 19 сразу со всеми основными вариантами рабочих столов: Cinnamon, MATE и Xfce. Если вы только начинаете знакомиться с удивительным миром Linux, то поясню: Cinnamon – это самый передовой и

Rosa Linux — Linux из России. ROSA Fresh. Сделана для дома. Создана для вас. ROSA Fresh — это современная отечественная операционная система Linux, создаваемая сообществом и легально доступная всем желающим совершенно бесплатно и без регистрации.

Иногда программа не запускается из-за отсутствия библиотеки определённой версии, при этом в системе может присутствовать эта самая библиотека, но другой версии. Чтобы было понятно, после одного из обновлений (в Arch Linux) перестал запускаться

Новая версия Deepin 15 включает в себя новый дизайн Центра Управления и компьютера, он имеет новый размытый и прозрачный стиль, также включены новые взаимодействия для угловой навигации и оконного менеджера наряду с выбором обоев рабочего стола,

Новые возможности в Linux Mint 19.3. Linux Mint 19.3 — это долгосрочный релиз поддержки, который будет поддерживаться до 2023 года. Он поставляется с обновленным программным обеспечением и приносит уточнения и множество новых функций, чтобы сделать

Linux Mint 19 – это релиз с длительной поддержкой до 2023 года. Он поставляется с обновлённым программным обеспечением и приносит усовершенствования и множество новых функций, чтобы сделать ваш рабочий стол более удобным. На момент написания, Linux

Linux Mint 18.1 Serena Cinnamon (Подробный обзор) Подробный обзор Beta версии Linux Mint 18.1 Serena Cinnamon Linux Mint команда объявила о выпуске обновления для 18.x филиала проекта. В новой версии, Linux Mint 18.1, доступен в двух версиях

Linux mint 18.2 Основные новшества Linux Mint 18.2 (MATE, Cinnamon, KDE и Xfce): В состав включены новые версии десктоп-окружений MATE 1.18 и Cinnamon 3.4, оформление и организация работы в которых продолжает развитие идей GNOME 2 — пользователю

Какой линукс выбрать? Какой linux лучше? Сегодня мы разберемся какие дистрибутивы линукс бывают и какой из них самый лучший. Первое что нужно понять: дистрибутивов линуксов очень много, больше 100. Но, как и в любой экосистеме, тут существует

Начало работы с btrfs для Linux. Файловая система B-tree — это файловая система и менеджер томов, объединенные в одно целое. Он предлагает много перспектив для доставки расширенного набора функций файловой системы в Linux.

Команда с гордостью объявляет о выпуске Linux Mint 20” Ulyana » Cinnamon Edition. Linux Mint 20-это долгосрочный релиз поддержки, который будет поддерживаться до 2025 года. Он поставляется с обновленным программным обеспечением и приносит

Linux Mint 20.2 Ума (Uma) Скачать. Самая большая новость в этом месяце-предстоящий выпуск Linux Mint 20.2 “Uma”. Мы надеемся, что БЕТА-версия будет готова к середине июня.

Новости Linux Январь 2017. НОВОСТИ LINUX, UBUNTU 2017 ЯНВАРЬ В Telegram появилась возможность удалить отправленное сообщения В мессенджере Telegram появилась возможность удалить отправленное сообщения. И если раньше оно удалялось только с одной

Обзор Solus 3 с рабочим окружением Budgie Этот релиз включает в себя из-из-коробки поддержка, универсальных программных пакетов для Linux. Поддержка снимков снимает давление со стороны поставщиков программного обеспечения для конкретной платформы,

Все три издания Linux Mint 19 (Cinnamon, MATE, Xfce) в настоящее время доступны для публичного тестирования. Официально новую бета версию планируют представить 4 июня 2018 года. Хотя перед началом публичных тестирования уже отловлено и исправлено

Преимущества и проблемы беспилотных летательных аппаратов БПЛА или беспилотный летательный аппарат представляет собой самолет с дистанционным управлением. Он может работать удаленно в режиме реального времени или запрограммирован для автономного

Новая ICQ (Windows, Linux, Mac, Web) Что нового: Mail Group представила обновленный мессенджер ICQ. Новая версия знаменитой «аськи» стала «умной, быстрой, гибкой». Разработчики добавили несколько интересных функций, которые

RFRemix 26 основанный на Fedora 26 (Russian Fedora) Официально объявили о выходе Fedora 26. Это проект по поддержке пользователей и разработчиков открытого ПО в России. Основная цель проекта — обеспечить, чтобы Fedora полностью отвечала

Угу, все правильно. Я так собираю у школьников и файлы-картинки, и PDF-файлы, и ODS-таблицы. В общем, если есть задание, и результатом его выполнения является файл, то я очень часто использую именно ejudge.

Если будете собирать картинки, сразу же увеличивайте параметр max_run_size для задачи — 64KB, наверное, маловато будет.

А еще я придумал для сдачи картинок или иных файлов использовать чекеры в виде простых bash-скриптов. Они просто проверяют формат файла. Например, так:

Code: Select all

#!/bin/bash                                                                                                                   
if file $2 | grep -q "PNG image"                                                                                              
then
        exit 0
else
        echo "Файл должен иметь формат PNG"
        exit 4
fi

И тогда в этой задаче можно сдавать только файлы в формате PNG.

MayaNash

1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

1

Ошибка при записи в бинарный файл

09.05.2014, 11:09. Показов 1863. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Задание — записать в бинарный файл последовательность из N байт вида «00001111 11110000 00001111 …».
Почему-то 11110000 записывается неправильно. Это 240 в десятичной и F0 в шестнадцатеричной системе, но при считывании получается FFFFFFF0. И дублируется последний байт. Почему?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <fstream>
using std::ifstream;
using std::ofstream;
using std::cin;
using std::cout;
using std::endl;
using std::ios;
 
void main()
{
    int n;
    setlocale(LC_ALL,"rus");
    cout << "Введите N: ";
    cin >> n; // вводим количество байтов
 
    char byte[2] = {15,240};
    ofstream fout("binfile",ios::binary);
    for (int i = 0; i < n; i++)
        fout.write(&byte[i%2], 1);
    fout.close();
 
    ifstream fin("binfile",ios::binary);
    char ch;
    while (!fin.eof())
    {
        fin.read(&ch,1);
        cout << std::hex << (int)ch << " ";
    }
    cout << endl;
    fin.close();
    system("pause");
}



0



7535 / 6397 / 2917

Регистрация: 14.04.2014

Сообщений: 27,863

09.05.2014, 11:14

2

У тебя массив byte фиксированной длины. Для чего вводить n? А если введут 10? Будет чтение за границами массива. И почему byte[i%2], а не byte[i]?



0



1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

09.05.2014, 11:31

 [ТС]

3

Обрати внимание, что если введут 10, то все будет нормально. i%2 — это остаток от деления на 2, то есть или 0 или 1. Так что выхода за границы по сути быть не может. Вопрос вообще не в этом.

Добавлено через 2 минуты
Задание конечно глупое, но как ни крути, в файле должны чередоваться 2 байта — 15 и 240. И всего должно быть N байтов.



0



3254 / 2056 / 351

Регистрация: 24.11.2012

Сообщений: 4,909

09.05.2014, 11:39

4

Керра, пишется и читается все верно. Второй байт — действительно 0xF0. Но вспомним, что char — знаковый. Т.е. это значение интерпретируется как -16. Приводим к int — получаем то же значение -16, но уже в ячейчке размером 4 байта. Что в дополнительном коде как раз 0xfffffff0.



0



1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

09.05.2014, 11:43

 [ТС]

5

Ясно, и что делать? abs не помогает



0



7535 / 6397 / 2917

Регистрация: 14.04.2014

Сообщений: 27,863

09.05.2014, 11:44

6

Лучший ответ Сообщение было отмечено MayaNash как решение

Решение

Лишний байт у тебя выходит из-за того, что флаг конца файла устанавливается только после неудачного чтения, поэтому одна лишняя итерация выполняется после чтения последнего символа. Тебе нужно после read(), например peek() вызвать, чтобы флаг был установлен. Или ещё что-то придумать, может читать исходя из размера файла.



1



0x10

3254 / 2056 / 351

Регистрация: 24.11.2012

Сообщений: 4,909

09.05.2014, 11:48

7

Лучший ответ Сообщение было отмечено MayaNash как решение

Решение

Керра, в выводе можно вот такую загогулину воткнуть.

C++
1
static_cast<int>(static_cast<unsigned char>(ch))



1



1296 / 469 / 151

Регистрация: 24.08.2011

Сообщений: 2,249

09.05.2014, 11:52

 [ТС]

8

nmcf, 0x10, спасибо, помогло



0



nmcf

7535 / 6397 / 2917

Регистрация: 14.04.2014

Сообщений: 27,863

09.05.2014, 11:53

9

У меня вот так работает:

C++
1
(int)(unsigned char)ch



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.05.2014, 11:53

9

I have client server architecture wherein I transfer a binary file from server to client.

Server Code:

            FILE *outFile = fopen("/tmp/localpkg.deb","wb");
            if( outFile == NULL )
            {
                     RPTLOG(1, "Error opening file for writing.n");
                     return -1;
            }

            FILE *readFilefp = fopen(file_name, "rb");

            if ( readFilefp == NULL)
            {
                     RPTLOG(1, "Error opening file.n");
                     return -1;
            }

            char fileBuffer[1024];
            bzero(fileBuffer, 1024);

            while(1)
            {

                    size_t readSize = fread(fileBuffer, sizeof(char), sizeof(fileBuffer) -1, readFilefp);

                    if(readSize == 0)
                    {
                            RPTLOG(1, "No more contents are left in file.n");
                            n = write(sockfd, "rn", 2);
                            break;
                    }

                    n = write(sockfd, fileBuffer,readSize);

                    fwrite(&fileBuffer, sizeof(char), readSize, outFile);

                    RPTLOG(1, "Data[%d] written to sock=%s.n", n, fileBuffer);
                    bzero(fileBuffer, 1024);

            }

            fclose(readFilefp);
            fclose(outFile);

            char *endfile_var =(char*) malloc(2048);
            bzero(endfile_var,100);
            strcpy(endfile_var,"ENDFILErn");

            n = write(sockfd, endfile_var, 9 );

            RPTLOG(1, "ENDFILE text sent to client[%s] NumBytes sent=%dn", endfile_var, n );

Client code:

                   FILE *fp = fopen(localfile, "wb");
                    if( fp == NULL )
                    {
                            RPTLOG(1, "Not enough permissions to write on disk, exiting....n");
                            break;
                    }

                    memset(buf, 0, 2048);

                    //Started receiving installation package from server
                    while ((ret = read(sock, buf, 2047)) > 0) //Stcuk point: read blocks over here when it is about to receive last few lines of
                    {                                         //binary file from server

                            buf[ret] = '';

                            if ( ret == 1 )
                            {
                                    RPTLOG(1, "Caught character  where ret = %dn", ret);
                                    if ( buf[0] == 'n' )
                                            continue;
                            }

                            if (strstr(buf, "ENDFILE") != 0 )
                            {
                                    RPTLOG(1, "Endfile detectedn");
                                    break;
                            }
                            else
                            {
                                    fwrite(buf, 1, ret, fp);
                            }

                            memset(buf, 0, 2048);

                    }

                    if( ret ==  0)
                    {
                            RPTLOG(4, "Connection closed from server = %d n", ret );
                    }
                    else if( ret <  0)
                    {
                            RPTLOG(4, "Read error on client socket= %d n", ret );
                    }

                    fclose(fp);

My Problem:
When server is about to send last few lines of binary file, client stuck in read call [stuck point in client code posted above]. Here client program is designed in such a way that when it receives «ENDFILE» line from server it will assume that file contents have been ended from server side and come out of while loop.

So kindly suggest the solution to receive binary file from server successfully.

[Special Note:] Client code has been wrapped up in a build and installed at customer end. So I have to make changes in server side code only. Also as indicated in server code above, for debugging purpose I have written content sent on socket to ‘/tmp/localpkg.deb’ file as well. And that file contains all the contents which were written on socket at server side.

[Special Note 2:] When I try to send plain text file, I can send it successfully. Problem comes in only while sending binary file.
Thanks in advance.

Когда я захожу через SSH, я вижу только это …

-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected

Я ничего не мог сделать здесь. Такие команды, как halt , poweroff , reboot , вернут command not found .

Как я могу это исправить? Я использую Debian Squeeze Linux

изменён Der Hochstapler68k

Обычно это сообщение об ошибке означает, что Linux не распознает файл как сценарий оболочки или как исполняемый файл.

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

Возможно, файл /usr/bin/id перезаписан?

Попробуйте запустить его, используя ./executablefilename вместо использования sh executetablefilename. В конце концов, это не скрипт оболочки.

ответ дан RidDeBakTiYar306

Проблема заключается в запуске двоичного файла для другой архитектуры процессора.
Вы можете использовать objdump (из binutils) для проверки архитектуры двоичных файлов.
Вы можете использовать uname для проверки архитектуры машины.

Например, я столкнулся с этой ошибкой «невозможно выполнить двоичный файл» при установке FF.Communicator — плагина Firefox для Chrome (поэтому я могу запускать страницы, которые используют Java-апплеты).

  • objdump показывает, что двоичный файл является 64-битным elf64-x86-64
  • uname показывает, что моя машина 32-битная i686

    $./FF.Communicator bash:./FF.Communicator: невозможно выполнить двоичный файл $ uname -mpio i686 i686 i386 GNU/Linux $ objdump -a./FF.Communicator./FF.Communicator: формат файла elf64-x86-64./FF.Communicator

  • objdump на работающем бинарнике на моей машине показывает, что это 32-битный elf32-i386

    $ objdump -a /bin /ls /bin /ls: формат файла elf32-i386

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

Для пользователей Mac OSX вы можете узнать информацию об архитектуре определенного файла, используя команду «file»:

$ file filename_here

Я делаю некоторые дикие предположения здесь, но похоже, что происходит следующее:

  1. Вы входите через SSH, вызывая bash для запуска ~/.profile или ~/.bashrc для настройки вашей среды (это нормально).
  2. В какой-то момент он пытается выполнить /bin/id чтобы получить ваш uid, который завершается неудачно, вызывая ошибку целочисленного выражения и завершая работу сценария, прежде чем он сможет настроить ваш $PATH .
  3. Поскольку ваш $PATH не установлен, bash может выполнять команды только с указанным полным путем.

Используйте export PATH=/bin:/usr/bin:/sbin:/usr/sbin чтобы исправить проблему $PATH пока не сможете устранить основную причину сбоя /bin /id.

ответ дан Darth Android34k

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

Это означает, что вы пытаетесь выполнить двоичный файл, используя ваш bash-скрипт, который не предназначен для запуска так, как вы пытаетесь. Это уже бинарный файл, и вы пытаетесь проанализировать и запустить его $ SHELL.

в очень простом примере, если вы попытаетесь запустить команду `w ‘, как

$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file

Точно так же вы можете использовать тот же метод или как он выглядит из вашего фрагмента кода.

В то время как для остальных команд все эти команды останова, выключения, перезагрузки и т.д. Являются командами, принадлежащими корню, и для выполнения и выполнения требуемой операции требуются привилегированные привилегированные права пользователя. обычные пользователи не могут запускать их. Другое объяснение состоит в том, что эти команды размещены в /sbin / и / usr /sbin, которых может не быть в вашей переменной $ PATH (которая используется для проверки команд в вашем распоряжении)

ответ дан Nasir Mahmood 1

Вы используете неверную версию установщика, например, 64-разрядную машину и пытаетесь установить 32-разрядную версию установщика.

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

  • Ошибка попытка использовать имя переменной нулевой длины
  • Ошибка попытка доступа к процессу выполняющему процедуру завершения
  • Ошибка попытайтесь задать винтовой канал другим образом
  • Ошибка попробуйте через несколько минут инстаграмм
  • Ошибка попробуйте позже теле2