Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 3 по теме работа с файлами и каталогами Выполнил ст

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.11.2024

Министерство  образования  и  науки  Украины

Севастопольский  национальный  технический  университет

Лабораторная работа №3

по теме

«работа с файлами и каталогами»

Выполнил: ст.гр. А-22

Литус И.В.

                                                                     Проверил:ст. Преподователь

         Старинская Д.Н.

Севастополь

2010

Цель Работы

       Изучение системных вызовов для работы с файлами.

Постановка задачи

Напишите программу, которая решает  задачу вашего варианта из лабораторной работы №2, используя  передачу данных через двоичные (не текстовые) файлы.

Для работы с файлами используйте системные вызовы open(), creat(), read(), write(), close().

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

1) Опция -g: формирование и вывод (на экран и в двоичный  файл) 10-15 наборов неупакованных чисел, содержащих информацию о состоянии устройства.

2) Опция -p: чтение данных из файла и упаковка в слова состояния устройства. Вывод полученных упакованных чисел в новый файл и  на экран.

3) Опция -u: чтение упакованных слов из файла,  распаковка и вывод на экран.

Для хранения данных использовать тип unsigned short (в строке форматирования функций типа printf(), scanf() добавляется префикс h: %hu, %hx, %hd).

Задание

Вариант 9

№разряда

15

14

13

12

11

10

09

08

07

06

05

04

03

02

01

00

Значение

O

O

O

O

O

C

D

N

N

N

N

N

N

N

N

N

Схема программы

   Pack                                     Unpack                              Generator        

Конец

Схемы подпрограмм

Текст Программы

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <unistd.h>

#include <fcntl.h>

#define FILERIGHTS     0644  

int pack(char*,char*);

int unpack(char*);

void generator(char *, int);

void myerror(char *);

int main(int argc, char * argv[])

{

if (argc < 3|| argc > 4)

{

 fprintf(stderr,"ошибка вызова %s\n",argv[0]);

 fprintf(stderr,"вызов: \n");

 fprintf(stderr,"генерация и запись файла: %s  -g целевой_файл количество_наборов_чисел\n",argv[0]);

 fprintf(stderr,"чтение данных из файла и упаковка: %s  -p исходный_файл\n",argv[0]);

               fprintf(stderr,"чтение упакованных  данных из файла и распаковка : %s  -p исходный_файл\n",argv[0]);

 exit(1);

}

else

{

 switch(argv[1][1])

 {

  case 'g': generator(argv[2], atoi(argv[3])); break;

  case 'p': pack(argv[2],argv[3]); break;

                       case 'u': unpack(argv[2]); break;

  default : printf("некорректная опция\n");

 }

    }

   return 0;

}

void generator(char * fnameout, int n)

{

int i;

int fdout;     

unsigned short mas[4];

int nmas = sizeof mas;

int nw;    

       if((fdout = creat(fnameout,FILERIGHTS))<0)

{

 myerror("generator: ошибка создания файла");

}

for (i=1; i <= n; i++)

{  

mas[0] = (unsigned short)rand()%32;  

mas[1] = (unsigned short)rand()%2;     

            mas[2] = (unsigned short)rand()%2;                        

            mas[3] = (unsigned short)rand()%512;

             printf("сгенерирован %d-набор:\n",i);

 printf("Chislo 1 %hu\n", mas[0]);

 printf("Chislo 2 %hu\n", mas[1]);

 printf("Chislo 3 %hu\n", mas[2]);

               printf("Chislo 4 %hu\n", mas[3]);

 

 if((nw = write(fdout, mas, nmas)) != nmas)

 {

  myerror("generator: ошибка записи ");

 }

}

if ( close(fdout) == -1)

{

        myerror("generator: ошибка закрытия файла ");

   }

}

int pack(char* fnamein, char* fnameout)

{

int fdin,fdout;

unsigned short mas[4];

int nmas = sizeof mas;

int nr,nw;

int i,c;

       int n=5;

       unsigned short UnitStateWord[5];

       int nmas1 = sizeof UnitStateWord;

        

if ((fdin = open(fnamein, O_RDWR))<0)

{

 myerror("reader: ошибка открытия файла");

}

i = 1;

 

while ((nr = read(fdin, mas, nmas)) == nmas)

{

           UnitStateWord[i]=(mas[0]&0x1F)<<11;

           UnitStateWord[i]|=(mas[1]&1)<<10;

           UnitStateWord[i]|=(mas[2]&1)<<9;

           UnitStateWord[i]|=mas[3]&0x1FF;

           printf("Прочитан %d-набор:\n",i);

    printf("Chislo 1 %hu\n", mas[0]);

    printf("Chislo 2 %hu\n", mas[1]);

    printf("Chislo 3 %hu\n", mas[2]);

           printf("Chislo 4 %hu\n", mas[3]);

  printf("Slovo sostoyaniya %d",UnitStateWord[i]);

        i += 1;

}

if (nr < 0)

{

 myerror("reader: ошибка чтения");

}

if (close(fdin) == -1)

{

 myerror("reader: ошибка закрытия файла");

}

          if((fdout = creat(fnameout,FILERIGHTS))<0)

{

 myerror("generator: ошибка создания файла");

}

for (i=1;i<n;i++)

       {

 if((nw = write(fdout, UnitStateWord, nmas1)) != nmas1)

 {

  myerror("generator: ошибка записи ");

 }

}

 

if ( close(fdout) == -1)

{

        myerror("generator: ошибка закрытия файла ");

       }

}

int unpack(char* fnamein)

{

int fdout;

unsigned short mas[4];

       unsigned short UnitStateWord[5]

int nmas = sizeof mas;

int nr;

int i,c;

       int nmas1=sizeof UnitStateWord;

         if ((fdin = open(fnamein, O_RDONLY))<0)

{

 myerror("reader: ошибка открытия файла");

}

i = 1;

while ((nr = read(fdin, UnitStateWord, nmas)) == nmas)

{

           mas[0]=(UnitStateWord[i]>>11)&0x1F;

           mas[1] =(UnitStateWord[i]>>10)&1;

           mas[2]=(UnitStateWord[i]>>9)&1;

           mas[3]=UnitStateWord[i]&0x1FF;

           printf("Nabor %d:\n",i);

    printf("Chislo 1 %hu\n", mas[0]);

    printf("Chislo 2 %hu\n", mas[1]);

    printf("Chislo 3 %hu\n", mas[2]);

           printf("Chislo 4 %hu\n", mas[3]);

  i += 1;

}

if (nr < 0)

{

 myerror("reader: ошибка чтения");

}

if (close(fdin) == -1)

{

 myerror("reader: ошибка закрытия файла");

}

}

void myerror(char * st)

{

perror(st);

 exit(1);

}

Результаты работы программы

Сгенерирован 1 набор:

Chislo 1 = 23

Chislo 2= 1

Chislo 3 = 0

Chislo 4 = 234

Slovo sostoyaniya 9d24

…..

Сгенерирован 5 набор:

Chislo 1 = 12

Chislo 2= 0

Chislo 3 = 1

Chislo 4 = 172

Slovo sostoyaniya 23g5

ВЫВОД

Приобрел навыки работы с с файлами и каталогами в компиляторе gcc.  Изучил поразрядных операций языка С. Освоил метод упаковывания чисел в 16-ричное число.




1. Принцип единства бюджетной системы Российской Федерации означает единство бюджетного законодательства Ро
2. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата технічних наук Київ 2001.html
3. КОНТРОЛЬНАЯ РАБОТА по дисциплине НАЛОГИ И НАЛОГООБЛАЖЕНИЕ Вариант 8
4. Перевозка грузов автомобильным траспортом
5. Аналитическая работа предприятия торговли
6. 5 Векселя Коносамент
7. Клинический диагноз- Хроническая экзема, стадия обострения с присоединением пиогенной инфекции
8. Микробиология и личная гигиена
9. Спинальная и эпидуральная анестезия
10. ЛЕКЦИЯ 4 СРЕДСТВА ВЛИЯЮЩИЕ НА ИММУННУЮ СИСТЕМУ
11. ЛЕКЦИЯ 22 ДРЕВНИЙ РИМ В ПЕРИОД ИМПЕРИИ
12.  На первом плане слева многоэтажный дом
13. паблик рилейшнз
14. Антихрист петр Алексей Брюсов Огненн ангел Крит.
15. Краткое содержание эпоса Читается за 10'15 мин Руй Диас де Бивар прозванный Сидом по навету врагов лиши
16. Компьютер происходит по двум целевым направлениям- 1 теоретическое изучение устройства принципов функц
17. ВАРИАНТ 1 1 В рационе питания больного стенокардией должны преобладать- А хлебобулочные изделия Б мясн
18.  Относительная полезность получаемого блага
19. Расчет и проектирование червячного редуктора
20. Карьера менеджера по персоналу