Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 25.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. Паранекроз ~ подобные некротическим но обратимые изменения 2
3. 201425012014 кафедры социальных наук фКФУ
4. Психология национальной идентичности
5.  Структура дисципліни 1
6. Развитие толерантного отношения молодежи к мигрантам в современном обществе
7. Сценическое движение которая объединяет в себе темы- координация инерция напряжение чувство движени
8. Портрет Владыки мрака в Поэме без героя
9. Вариант 7 В результате проведения мероприятий по повышению безопасности технологических процессов и произ
10. Территория 63 ИНФОРМАЦИОННОЕ ПИСЬМО 1 от 09
11. Правоведение 2011 ~ 2012 уч
12. тема технического обслуживания и ремонта автомобилей 4 Виды и задачи технической диагностики автомобиля
13. возник из курса общедоступных лекций читанных мною в Первом Петроградском университете в летнем семестре 1
14. тема система органов выделения конечных продуктов обмена и выведения их из организма наружу
15. Теоретические основы учета расчетов по заработной плате и видов удержаний из нее
16.  Общие требования безопасности 1
17. От правильного решения этой проблемы во многом зависит понимание объемапредмета и задач семантики или сем
18. теоретическую ортодоксальность подход автора к изучению природы психологического конфликта не теряет ак
19. Охрана труда несовершеннолетних
20. Доклад на съезде Американской социологической ассоциации сентябрь 1965 г.