Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
#1

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

07.05.2014, 04:09. Просмотров 1033. Ответов 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 и записать.Но преобразовывать туда-сюда не желательно,да и хотелось бы понять в чем проблема.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 04:09     Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int?
Посмотрите здесь:

как записать данные из Int файл C++
C++ Как узнать тип вводимых данных с помощью перегрузки функции?
C++ Используя ввод-вывод в стиле С создать файл и записать в него структурированные данные
Как при помощи ф-ий read/write записать в файл, а потом считать с него C++
C++ Как записать структуру в файл с помощью fstream?
C++ Ввод букв в тип int
C++ Неверный тип параметра при вызове функции write потока ofstream
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BlackSpace
136 / 129 / 51
Регистрация: 15.03.2014
Сообщений: 274
07.05.2014, 05:14     Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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 - работа с файлами. В данной главе описан низкоуровневый доступ к файлам.
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 14:04  [ТС]     Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int? #3
Спасибо.Работает.Но почему не могу открыть сам файл?Пишет "Неизвестный тип файла".Или в ubuntu нельзя открыть двоичный файл?
BlackSpace
136 / 129 / 51
Регистрация: 15.03.2014
Сообщений: 274
07.05.2014, 14:28     Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int? #4
Файл - просто набор байтов.
Если программа открывает файл и знает каким образом интерпретировать его содержимое - она отобразит адекватно его данные.

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

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

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

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

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

C++ Строки, имеющиеся в двух заданных текстовых файлах, записать в третий файл (файловый ввод/вывод)
Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод) C++
C++ Считать данные из текстового файла по условию и записать их в другой текстовый файл (файловый ввод/вывод)
Низкоуровневый консольный ввод и вывод C++
C++ Для каждой строки файла удалить среднее слово; результат записать в файл (файловый ввод/вывод)

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

Или воспользуйтесь поиском по форуму:
TiraniD
0 / 0 / 0
Регистрация: 25.11.2012
Сообщений: 54
07.05.2014, 18:02  [ТС]     Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int? #7
Разобрался.Большое спасибо.
Yandex
Объявления
07.05.2014, 18:02     Низкоуровневый ввод-вывод. Как с помощью функции write записать в файл тип int?
Ответ Создать тему
Опции темы

Текущее время: 11:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru