Будь умным!


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

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

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

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

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

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

от 25%

Подписываем

договор

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

Скидка 25% при заказе до 21.5.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. Макроструктура металла и сплавов
3. Белгородский строительный колледж Специальность 270802 Строительство и эксплуатация зданий и соору
4. тема и принципы экологического права 4
5. Расчет эффективности земельно-кадастровых работ
6. от Центральной Европы до Центральной Азии
7. В одних странах мира оно возникло в качестве непосредственного преемника рабовладельческого государства н
8. Роль у природі та житті людини.html
9. Влияние факторов внешней среды на жизнедеятельность микроорганизмов
10. Социальная власть публичного выступления
11. Реферат- Понятие объекта и субъекта в управлении социальной работой
12. Соответственно процессуальным теориям мотивации поведение человека есть также функцией ее восприятия и о
13. С.Сейфуллина УТВЕРЖДАЮ
14.  Визначальні особливості діелектриків У межах макроскопічної теорії у якій діелектрик розглядається як
15. варіант Л.А. Мурадова Граматика французького языка- М
16. а ISBN 5235025881 М В
17. . Яка одиниця довжини хвилі де Бройля є основною в СІ А 1 м Б 1 Гц В 1 с Г 1 с1 Д рад 2
18. Аккумуляторная батарея служит источником питания для всех потребителей во время стоянки
19. Болховский педагогический колледж ПОРТФОЛИО УЧЕБНАЯ ПРАКТИКА ПО ПРОФЕССИОНАЛЬНОМУ
20. Корпоративная культура ~ очень действенный инструмент развития которая позволяет двигать компанию вперед