Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54

Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int?

07.05.2014, 04:09. Показов 10320. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю в Ubuntu.По заданию требуется использовать функции низкоуровневого ввода-вывода.Как с помощью функции write(fd,buf,bufsize) записать в файл тип int?Кроме char ничего не удается туда впихнуть.Файл просто не открывается.Кусок кода:
Кликните здесь для просмотра всего текста

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct tip{
int integer;
double doubled;
float floating;
char m[100];
bool booling;};
tip *obj = new tip;
 
.....
 
cout<<"Введите имя файла:";
cin.ignore(); 
cin.get(k,15);
mode_t fmode =S_IRUSR | S_IWUSR |  S_IRGRP |  S_IWGRP | S_IROTH | S_IWOTH;
int fflags = O_WRONLY | O_CREAT |O_TRUNC;
int fd=open(k,fflags,fmode);
write(fd,&obj->integer,sizeof(int));


Единственный вариант,который сработал-это преобразовать Int в char и записать.Но преобразовывать туда-сюда не желательно,да и хотелось бы понять в чем проблема.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2014, 04:09
Ответы с готовыми решениями:

С помощью read и write записать массив структур в файл
Не могу с помощью системных вызовов read write записать массив структур в файл. Именно read write. Если такое вообще возможно.

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

Низкоуровневый консольный ввод и вывод
Добрый вечер всем форумчанам (может, у кого еще день ;D) Помогите, пожалуйста. Вот написал такой код: for (int i = 0;; i++) { ...

6
209 / 183 / 114
Регистрация: 15.03.2014
Сообщений: 398
07.05.2014, 05:14
Лучший ответ Сообщение было отмечено TiraniD как решение

Решение

Цитата Сообщение от TiraniD Посмотреть сообщение
Как с помощью функции write(fd,buf,bufsize) записать в файл тип int?
TiraniD, приведу простой пример работы с write() и read(). Пример не предусматривает обработку ошибок.
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
34
35
#include <unistd.h>
#include <fcntl.h>
#include <iostream>
 
using namespace std;
 
int main() {
 
    const int size = 10;
 
    int block[ size ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int blockCopy[ size ] = { 0 };
 
    // показываем, что массив типа int blockCopy содержит нули
    for ( size_t i = 0; i < size; ++i )
        cout << blockCopy[ i ] << " ";
    cout << endl;
 
    // пишем в файл массив типа int block
    int fileOut = open( "data", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR );
    write( fileOut, block, sizeof( block ) );
    close( fileOut );
 
    // читаем из файла элементы типа int в массив типа int blockCopy
    int fileIn = open( "data", O_RDONLY );
    read( fileIn, blockCopy, sizeof( blockCopy ) );
    close( fileIn );
 
    // показываем содержимое массива типа int blockCopy
    for ( size_t i = 0; i < size; ++i )
        cout << blockCopy[ i ] << " ";
    cout << endl;
 
    return 0;
}
Вывод программы.
Code
1
2
0 0 0 0 0 0 0 0 0 0 
1 2 3 4 5 6 7 8 9 10
Рекомендую к прочтению книгу.
Нэйл Мэтью, Ричард Стоунс. Основы программирования в Linux. 4-е издание 2009.
Глава 3 - работа с файлами. В данной главе описан низкоуровневый доступ к файлам.
1
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 14:04  [ТС]
Спасибо.Работает.Но почему не могу открыть сам файл?Пишет "Неизвестный тип файла".Или в ubuntu нельзя открыть двоичный файл?
0
209 / 183 / 114
Регистрация: 15.03.2014
Сообщений: 398
07.05.2014, 14:28
Файл - просто набор байтов.
Если программа открывает файл и знает каким образом интерпретировать его содержимое - она отобразит адекватно его данные.

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

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

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

На скриншоте я открыл данный файл с помощью программки Sublime Text 3. Можно увидеть как она интерпретировала содержимое файла. В данном случае хорошо видны числа с 1 до 10. Размер файла как и предполагалось равен 40 байт - это 10 значений типа int, по 4 байта каждое.

Если Вы создали некий двоичный файл с помощью своей программы, то Вам и писать код, который будет знать как содержимое данного файла интерпретировать.
Миниатюры
Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int?  
1
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 15:24  [ТС]
Ясно.И тогда последний вопрос.Как считать из такого файла массив char?(Записываю в файл одновременно int и char).Получается считать только первый символ,и только в виде числа.
0
209 / 183 / 114
Регистрация: 15.03.2014
Сообщений: 398
07.05.2014, 15:43
Если Вы записываете int и char, то можно также их и читать обратно как записали.
Вообще если у Вас есть несколько разных типов данных, которые необходимо сохранять в двоичный файл - создаете структуру данных и ее уже пишете.
1
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 18:02  [ТС]
Разобрался.Большое спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2014, 18:02
Помогаю со студенческими работами здесь

Как при помощи ф-ий read/write записать в файл, а потом считать с него
Такой вопрос! Как при помощи ф-ий read/write записать в файл, а потом считать с него различные типы данных, как int,double, char, char. ...

Используя ввод-вывод в стиле С++ создать файл и записать в него структурированные данные
1. Используя ввод-вывод в стиле С++ создать файл и записать в него структурированные данные. (Структура &quot;DVD-диск&quot;: ...

Используя ввод-вывод в стиле С создать файл и записать в него структурированные данные
Помогите очень нужна ваша помощь. Cтруктура &quot;Стадион&quot;: - название; - год постройки; - количество площадок; - виды спорта. ...

Организовать ввод, округление числа с точностью до 2 знака с помощью своей функции (по закону: 6 - 9>0), и вывод обработанных чисел.
Организовать ввод, округление числа с точностью до 2 знака с помощью своей функции (по закону: 6 - 9&gt;0), и вывод обработанных чисел.

как записать данные из Int файл
как записать данные из Int файл


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru