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

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

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

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

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

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

от 25%

Подписываем

договор

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

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

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

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

Лабораторная работа №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. 375 Hudson Street New York New York 10014 US Penguin Group Cnd 90 Eglinton venue Est Suite 700 Toronto Ontrio Cnd M4P 2Y3 division of Person Penguin Cnd Inc
3. ТРЕНИНГИ СЕМИНАРЫ КОНСАЛИТИНГ ЮРИДИЧЕСКИЕ И БУХГАЛТЕРСКИЕ УСЛУГИ КУРСЫ ИНОСТРАННЫХ ЯЗЫКОВ
4.  Инфильтрат уплотнение Уплотнение болезненность в местах инъекций местное покраснение
5. тематики та комп~ютерноінформаційних систем Дисципліна- Вступ до спеціальності Лабораторн
6. м гг прошлого столетия характеризуется вообще говоря двумя чертами- вопервых общей неудовлетвореннос
7. Реферат на тему- ldquo;Єгипетrdquo; економікогеографічна характеристика Єгипет держава на північному
8. СОДЕРЖАНИЕ ДИСЦИПЛИНЫ В
9. ~Есть все основания рассматривать кисть руки как орган речи ~ такой же как артикуляционный аппарат
10. О предоставлении субсидии на оплату жилья и коммунальных услуг