Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
1

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

07.05.2014, 04:09. Просмотров 2680. Ответов 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)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 04:09
Ответы с готовыми решениями:

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

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

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

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

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

6
BlackSpace
151 / 142 / 96
Регистрация: 15.03.2014
Сообщений: 297
07.05.2014, 05:14 2
Лучший ответ Сообщение было отмечено 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;
}
Вывод программы.
Код
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
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 14:04  [ТС] 3
Спасибо.Работает.Но почему не могу открыть сам файл?Пишет "Неизвестный тип файла".Или в ubuntu нельзя открыть двоичный файл?
0
BlackSpace
151 / 142 / 96
Регистрация: 15.03.2014
Сообщений: 297
07.05.2014, 14:28 4
Файл - просто набор байтов.
Если программа открывает файл и знает каким образом интерпретировать его содержимое - она отобразит адекватно его данные.

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

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

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

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

Если Вы создали некий двоичный файл с помощью своей программы, то Вам и писать код, который будет знать как содержимое данного файла интерпретировать.
1
Миниатюры
Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int?  
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 15:24  [ТС] 5
Ясно.И тогда последний вопрос.Как считать из такого файла массив char?(Записываю в файл одновременно int и char).Получается считать только первый символ,и только в виде числа.
0
BlackSpace
151 / 142 / 96
Регистрация: 15.03.2014
Сообщений: 297
07.05.2014, 15:43 6
Если Вы записываете int и char, то можно также их и читать обратно как записали.
Вообще если у Вас есть несколько разных типов данных, которые необходимо сохранять в двоичный файл - создаете структуру данных и ее уже пишете.
1
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 18:02  [ТС] 7
Разобрался.Большое спасибо.
0
07.05.2014, 18:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 18:02

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

Ввод буквы в тип int
Доброго времени суток. Как при вводе в целочисленную переменную буквы вывести на экран сообщение и...

Ввод букв в тип int
Например в этой программе #include &lt;iostream&gt; #include &lt;windows.h&gt; //#include &lt;string&gt;...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.