Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112

Вывести из файла указанный диапазон байт на std вывод

06.02.2012, 23:17. Показов 2361. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Пожалуйста помогите написать код для программы или хотя бы объясните примерно как делать.

Вот задание:

Написать программу fgetfdata на языке C, позволяющую вывести с задан-
ного файла указанный диапазон байт на стандартный вывод.
Программа должна иметь такой формат вызова
fgetfdata file offset size
Если первый аргумент задан как -h, то программа должна вывести крат-
кую справку и завершить работу. В противном случае первый аргумент счи-
тается именем файла, из которого надо получить данные, второй – началь-
ным смещением, третий – максимальным количеством считываемых байт.
Если файл имеет недостаточную длину, следует читать до конца файла.
Следует проверять допустимость переданных параметров и статус завер-
шения системных вызовов. В случае ошибки следует вывести на стандарт-
ный вывод об ошибках (stderr) описание ошибки, и завершиться с ненулевым
кодом возврата. Рекомендуется воспринимать входные целочисленные пара-
метра в десятичном, шестнадцатеричном (0x1F) и восьмеричном (077) виде.
Если offset задан отрицательным числом, то оно указывает смещение отно-
сительно конца файла;
Для операций с файлами использовать стандартные функции open, close,
read, write, lseek библиотеки языка C, обеспечивающие доступ к системным
вызовам операционной системы.
Программа должна быть снабжена коментариями, отражающими ход ее
работы, а также содержать название лабораторной работы и сведения об ав-
торе программы.
Следует считать, что size может быть больше максимального размера
оперативной памяти, доступной программе, поэтому размер буфера для си-
стемных вызовов ввода-вывода не должен превышать 1024 байт. Для целей
отладки рекомендуется установить размер буфера в 16 байт.

Добавлено через 4 минуты
Вывод:

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
36
37
38
39
40
#include <stdio.h>
#include <string.h>
 
int main (int argc, char* argv[])      
                                       
{
 
        FILE *file; 
        char *fname = "some_file.txt";
        char result_sting[20]; //Строка в 20 символов
 
        file = fopen(fname,"r");
 
        if(file == 0)
        {
                printf("не могу открыть файл '%s'",fname);
                return 0;
        }
 
 
        int i=0;
        char *real_tail;
 
        while(fgets(result_sting,sizeof(result_sting),file))
        {
                real_tail="";
                printf("Строка %d:Длина строки - %d:",i++,strlen(result_sting));
 
                if(result_sting[strlen(result_sting)-1] == '\n')//проверяем является ли последний элемент в строке символом ее окончания
                {
                        real_tail="\\n";
                        result_sting[strlen(result_sting)-1]='\0';
                };// эта часть кода добавлена лишь для отображения символа конца строки в консоль без перевода на новую строку 
                printf("%s%s\n",result_sting,real_tail);
        }
 
        fclose(file);
 
return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2012, 23:17
Ответы с готовыми решениями:

Используя файл Mail.Log, вывести информацию за указанный диапазон времени
Используя файл Mail.log, вывести информацию за указанный диапазон времени (временной период передается скрипту в качестве параметров ...

Как вывести 10 байт после определенных байт из файла
Здравствуйте. Есть к примеру файл с расширением *.bin, подскажите как реализовать вывод на экран 12 байт после определенных найденных в...

Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии)
Проверил работу программы на маленькой картинке(744 байт). Все работает. С несколько бОльшими файлами(512КБ) нет. Суть задачи в том,...

8
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
07.02.2012, 06:58
FILE *fp, fgetc и т.д. не годятся - у тебя ж в задании написано. open, read... и т.д. это функции, которые тебе надо использовать.
для приема аргумента "-h" тебе нужно функцию getopt(), заг. файл #include <unistd.h> в линуксе.

Тема "низкоуровневый ввод-вывод" в любом учебнике по си.
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
07.02.2012, 14:03  [ТС]
fgets сказали можно использовать
подскажите пожалуйста как правильно написать условие в argv
если argv то есть в консоли первый аргумент будет -h
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
07.02.2012, 17:51
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <unistd.h>
#include <stdio.h>
 
int main(int argc, char **argv)
{
    if ( getopt(argc, argv, "h") != -1 )
    {
        printf("помощь\n");
    }
    else
    {
        printf("для хелпа введите -h\n");
    }
    return 0;
}
1
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
07.02.2012, 17:54
во вложенном файле мануал getopt с кучей примеров.
на ангицком, но там все понятно из примеров.
Вложения
Тип файла: txt getopt_man.txt (12.7 Кб, 32 просмотров)
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
07.02.2012, 21:47
сама программа. понимает только десятичные
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
int open_file(char [], int , int );
 
int main(int argc, char **argv)
{
    if ( getopt(argc, argv, "h") != -1 )
    {
        printf("помощь:\n");
        printf("формат вызова программы: file offset size\n");
        return 1;
    }
 
    if (argc != 4)
    {
        printf("неправильный формат вызова \n");
        printf("для хелпа введите -h\n");
        return 1;
    }
    
    open_file(argv[1], atoi(argv[2]), atoi(argv[3]));
    
    return 0;
    
}
 
int open_file(char filename[], int offset, int size)
{
    int fd;         // дескриптор
    int whence;     // откуда считать offset
    unsigned char buf;  // буфер, в который будем читать
 
    fd=open(filename, O_RDONLY);
    if ( offset > 0 ) 
        whence=SEEK_SET; // с начала
    else
        whence=SEEK_END; // с конца
    
    lseek(fd, offset, whence);  // смещаемся
    
    //~ читаем и выводим на экран
    while (size)
    {
        if ( read(fd, &buf, 1) <= 0 ) // читаем байт
            break;
        write(1, &buf, 1); // 1 - это stdout
        size--;
    }
    printf("\n");
    return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от JerryJackson Посмотреть сообщение
сведения об ав-
торе программы
тебе сведения об авторе программы нужны?
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
08.02.2012, 19:55  [ТС]
нет , я этого не присылал
странно

Добавлено через 16 секунд
спасибо
за помощь)

Добавлено через 40 секунд
очень помогло)особенно manual of getopt
))
спасибо еще раз)

Добавлено через 2 минуты
Добавлено через 4 минуты
Сообщение от JerryJackson
сведения об ав-
торе программы


Админы я этого не присылал....
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
08.02.2012, 20:57
просто у тебя в задании написано:
Цитата Сообщение от JerryJackson Посмотреть сообщение
Программа должна быть снабжена коментариями, отражающими ход ее
работы, а также содержать название лабораторной работы и сведения об ав-
торе программы.
1
50 / 6 / 2
Регистрация: 15.07.2010
Сообщений: 112
09.02.2012, 00:58  [ТС]
ааааааааа)))
я даже не обратил внимания на этот пункт))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2012, 00:58
Помогаю со студенческими работами здесь

Программа, которая считывает 8 байт из созданного файла MyFile.dat, начиная с 7-го байта, относительно начала, и 10 байт от конца файла
Привет, вот задание собсно Напишите программу, которая считывает 8 байт из созданного ранее файла MyFile.dat, начиная с 7-го байта,...

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

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

SaveFileDialog вывести в переменную указанный путь и имя файла
SaveFileDialog вывести в переменную указанный путь и имя файла. Как сделать то это?

Определите, попадает ли число в указанный диапазон от 0 до 10
Помогите пожалуйста в MessageBox выводится что-то не то string s; double a, b, x; public Form1() { ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru