66516

ВЗАИМОДЕЙСТВИЕ С ФАЙЛОВЫМИ СИСТЕМАМИ UNIX/WINDOWS

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

Информатика, кибернетика и программирование

Цель работы — изучение основных файловых операций в ОС UNIX и Windows, работы механизмов перенаправления ввода/вывода, конвейера, механизма управления устройствами ввода-вывода UNIX при помощи специальных файлов устройств, а также с организацией прямого доступа к диску в ОС Windows.

Русский

2014-08-22

89.96 KB

0 чел.

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ОТЧЕТ

по лабораторной работе №3

«ВЗАИМОДЕЙСТВИЕ С ФАЙЛОВЫМИ СИСТЕМАМИ UNIX/WINDOWS»

по курсу «Операционные системы»

Выполнил

студент гр. 2088/4    А.А.Чернышев

                           <подпись>

Руководитель     А.С. Коноплев

                           <подпись>

Санкт-Петербург

2011

  1.  Формулировка задания

Цель работы — изучение основных файловых операций в ОС UNIX и Windows, работы механизмов перенаправления ввода/вывода, конвейера, механизма управления устройствами ввода-вывода UNIX при помощи специальных файлов устройств, а также с организацией прямого доступа к диску в ОС Windows.

2. Использованные теоретические сведения

CHS (от англ. Cylinder, Head, Sector) — система адресации сектора (как минимальной единицы в операции чтения(записи)) дисковых накопителей (жёстких магнитных дисковнакопителей на гибких магнитных дисках и т. п.) основанная на использовании физических адресов геометрии диска.

Сектор на жёстком диске адресуется кортежем из трёх чисел: цилиндр-головка-сектор, именно так, как этот блок физически расположен на диске.

Под цилиндром (Cylinder) понимается совокупность дорожек одинакового радиуса на всех магнитных дисках (блинах) одного жёсткого диска. Контроллер жёсткого диска интерпретирует значение в радиус, на который передвигается магнитная головка чтения (Head). С каждой магнитной поверхности магнитного диска чтение производит только одна головка, следовательно, указывая головку, мы также указываем ту поверхность, с которой следует считывать информацию. Сектор диска, как понятно из геометричекого определения, интерпретируется как диапазон градуса поворота диска

Очевидно, что такая схема плохо подходит к недисковым устройствам хранения (ленты, сетевые хранилища), потому и не используется для них. Схема CHS и её расширенная версия ECHS использовались на ранних приводах ATA использующих интерфейс ESDI.

В жёстких дисках объёмом более 524 Мб со встроенными контроллерами эти координаты уже не соответствуют физическому положению сектора на диске и являются «логическими координатами», что обусловило введение новых режимов адресования, сперва Large и в современных — LBA.

LBA (англ. Logical block addressing) — механизм адресации и доступа к блоку данных на жёстком диске, при котором системному контроллеру нет необходимости учитывать геометрию самого жесткого диска (количество цилиндров, сторон, секторов на цилиндре). Контроллеры современных IDE-дисков в качестве основного режима трансляции адреса используют LBA.

3. Результаты работы

3.1. Выполнение индивидуального задания

1) Выполнить запуск программ, приведенных в примерах 1-4. Модифицируйте программу из примера 1 на использование функции perror() для извещения оператора об ошибках. Модифицируйте программу из примера 4 для выполнения побайтового копирования одного файла в другой.

Пример 1. Открытие файла с обработкой ошибок.

#include <stdio.h>

#include <fcntl.h>

#include <errno.h>

int main(){

 int fd;

 if((fd = open("nonesuch", O_RDONLY)) == -1)

 perror("Ошибка при работе с файлом!");

}

Пример 2. Чтение и запись в файл.

#include<unistd.h>

#include<fcntl.h>

main()

{

  int fd;

 ssize_t nread;

 char buf[1024];

 fd = open (“data”, O_RDONLY);

  lseek(fd, 10, 0);

 nread = read(fd, buf, 1024);

 close(fd);

}

Пример 3. Цикл просмотра открытых дескрипторов

#include <stdio.h>

#include <unistd.h>

#include <fcntl.h>

int main (void)

{

 int fd, x;

 for(fd = 0; fd < 1000; fd++)

{

 x = fcntl(fd, F_GETFL, 0);

 if(x != -1)

  fprintf(stdout, "%d:%d\n", fd, fcntl(fd, F_GETFL));

 }

 return 0;

}

Пример 4. Создание потоков ввода-вывода.

#include<stdio.h>

#include<errno.h>

#include<fcntl.h>

int main(){

 

 char buffer[1024]= "";

FILE *inf, *outf;

 if ((inf = fopen("in.txt" ,"r")) == NULL)

 perror("невозможно открыть входной файл");

 if ((outf = fopen("out.txt", "w")) == NULL)

 perror("невозможно открыть выходной файл");

 

 fread(buffer ,1 , 1024, inf);

fwrite(buffer, 1, sizeof(buffer), outf);

fclose(inf);

fclose(outf);

 return 0;

}

2) Написать на языке С программу readwrite10 выполняющую чтение 10 байт из стандартного потока ввода и запись их в стандартный поток вывода.

#include "stdafx.h"

#include <stdio.h>

int main()

{

  char str[11];

  fgets(str,11,stdin);

  char *buf;

  buf=str;

  while((*buf != '\0') && fputc(*(buf++), stdout) != EOF);

  while(getchar()!='q');

  return 0;

}

3) Произвести чтение нулевого сектора жесткого диска и вывести в доступном виде (с пояснениями), интерпретацию 0-го дескриптора основного раздела. Операционная система WindowsNT/2000/XP.

#include "stdafx.h"

#include <windows.h>

#include <stdio.h>

#include<iostream>

#pragma pack(push, 1)

typedef struct PART

{

UCHAR ucActivePartFlag; // Индикатор активного раздела

UCHAR ucDH; // CHS-адрес первого сектора, head

UCHAR ucCL; // sector

UCHAR ucCH; // cylinder

 UCHAR ucType; // Тип раздела (файловой системы)

UCHAR ucEndDH; // CHS-адрес последнего сектора, head

 UCHAR ucEndCL; // sector

UCHAR ucEndCH; // cylinder

 DWORD dwLba; // LBA-адрес первого сектора

DWORD dwSize; // Количество секторов в разделе

};

typedef struct MBR

{

 BYTE        LoadCode[0x1BE];

 struct PART rt[4];

 WORD        EndFlag; };

 int PartitionCodes[] = {

 0x00, 0x01,0x02,0x03,0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,0x63,0x64,0x65,0x75,0x80, 0x81,0x82,0x83, 0x93, 0x94,0xa5, 0xb7, 0xb8, 0xc7,0xdb, 0xe1, 0xe3, 0xf2, 0xff, 0x0b, 0x0c, 0x0e, 0x0f

};

 char* PartitionNames[] = {

 "NULL", "DOS 12-bit FAT","XENIX root","XENIX usr", "DOS 16-bit FAT", "Extended partition", "DOS 16-bit >=32M","OS/2 HPFS or NTFS","AIX", "AIX bootable","OS/2 Boot Manager","GNU HURD", "Novell Netware 286", "Novell Netware 386","PC/IX", "Old MINIX","Linux/MINIX", "Linux swap", "Linux native", "Amoeba", "Amoeba BBT","FFS (BSD/386)","BSDI fs", "BSDI swap","Syrinx", "CP/M","DOS access","DOS R/O", "DOS secondary", "BBT (bad track table)","Первичный раздел Windows FAT-32","Расширенный раздел Windows FAT-32","Расширенный раздел Windows FAT-16", "Первичный раздел Windows FAT-32"

};

 

 char* GetPartitionName(int code){

 int i;

 for(i = 0; i < sizeof(PartitionCodes)/sizeof(int); i++)

{

 if(PartitionCodes[i] == code)

 {

  return PartitionNames[i];

 }

}

 return "Not defined";

}

int main(void)

{

setlocale (LC_ALL,"rus");

 HANDLE hDrive = CreateFile(TEXT("\\\\.\\PHYSICALDRIVE0"),               

                             GENERIC_READ|GENERIC_WRITE,         

                             FILE_SHARE_READ|FILE_SHARE_WRITE,

                             NULL,

                             OPEN_EXISTING,

                             FILE_ATTRIBUTE_NORMAL,

                             NULL);

 if (INVALID_HANDLE_VALUE == hDrive)

   printf("CreateFile failed %d\n", GetLastError());

 else

 {

   struct MBR mbr;

   DWORD      NumberOfBytesRead = 0;

   RtlZeroMemory(&mbr, sizeof(mbr));

   if (0 == ReadFile(hDrive, &mbr, sizeof(mbr), &NumberOfBytesRead, 0))

     printf("ReadFile failed %d\n", GetLastError());

   else if (sizeof(mbr) != NumberOfBytesRead)

     printf( "sizeof(mbr) = %d, ReadFile read %d\n",

       sizeof(mbr), NumberOfBytesRead);

   else

   {

     int i=0;

  char* Name=GetPartitionName(mbr.rt[i].ucType);

  printf("Метка активного раздела: %s\n", mbr.rt[i].ucActivePartFlag ? "Активен" : "Неактивен");

printf("CHS-адрес первого сектора, head: %d\n", mbr.rt[i].ucDH);

 printf("CHS-адрес первого сектора, sector: %d\n", mbr.rt[i].ucCL);

 printf("CHS-адрес первого сектора, cylinder: %d\n", mbr.rt[i].ucCH);

 printf("Тип раздела (файловой системы): %s\n", Name);

printf("CHS-адрес последнего сектора, head: %d\n", mbr.rt[i].ucEndDH);

 printf("CHS-адрес последнего сектора, sector: %d\n", mbr.rt[i].ucEndCL);

 printf("CHS-адрес последнего сектора, cylinder: %d\n", mbr.rt[i].ucEndCH);

 printf("LBA-адрес первого сектора: %d\n", mbr.rt[i].dwLba);

 printf("Количество секторов в разделе: %d\n", mbr.rt[i].dwSize);

}

   CloseHandle(hDrive);

 }

getchar();

 return 0;

};

В результате получили:

 Итак, общая структура MBR может быть представлена следующей таблицей:

Смещение Длина Описание

000h      446  Код загрузчика

1BEh       64  Таблица разделов

          16  Раздел 1

1CEh       16  Раздел 2

1DEh       16  Раздел 3

1EEh       16  Раздел 4

1FEh        2  Сигнатура (55h AAh)

Каждый 16-ти байтовый блок имеет следующую структуру:

Смещение Длина Описание

00h        1   Признак активности раздела

01h        1   Начало раздела - головка

02h        1   Начало раздела - сектор (биты 0-5), дорожка (биты 6,7)

03h        1   Начало раздела - дорожка (старшие биты 8,9 хранятся в байте номера сектора)

04h        1   Код типа раздела

05h        1   Конец раздела - головка

06h        1   Конец раздела - сектор (биты 0-5), дорожка (биты 6,7)

07h        1   Конец раздела - дорожка (старшие биты 8,9 хранятся в байте номера сектора)

08h        4   Смещение первого сектора

0Ch        4   Количество секторов раздела

4) Напишите свою версию команды chmod, используя ее описание в справочном руководстве вашей системы UNIX.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <errno.h>

/* проверка корректности режимов */

int checkmode(char *s)

{

char *p, buf[1024];

strncpy(buf, s, sizeof(buf));

for(p = buf; *p != '\0'; p++) {

 *p -= '0';

 if(*p < 0 || *p > 7 || (p-buf) > 4)

  return -1;

}

return 0;

}

int

main(int argc, char *argv[])

{

mode_t mode;

 

if(argc < 3) {

 printf("usage: %s <mode> <file...>\n", argv[0]);

 return 1;

}

if(checkmode(argv[1]) < 0) {

 printf("chmod: invalid mode \"%s\"\n", argv[1]);

 return 1;

}

sscanf(argv[1], "%o", &mode); /* приводим режим в восьмеричное число*/

 for(argv += 2; *argv != NULL; argv++) {

 if(chmod(*argv, mode) < 0)

  printf("chmod: %s: %s\n", *argv, strerror(errno));

 }

return 0;

}

3.2. Ответы на контрольные вопросы

Для чего служит стандартная библиотека потоков ввода/вывода (stdio)?

Библиотека  stdio  является  надстройкой  над  системными  вызовами.  Она предоставляет  высокоуровневый  интерфейс  работы  с  потоками  ввода-вывода  для программ  на  языке  C,  независимо  от  используемой  операционной  системы  и  ее системных  вызовов.  Для  фактического  доступа  к  файлам  из  кода  библиотеки производятся обращения к системным функциям ОС.

Что подразумевается под понятием «конвейер программ»?

Под  конвейером  понимается  такой  способ  обработки  информации несколькими  программами,  при  котором  выходные  данные  одной  программы служат входными для следующей. В среде UNIX принято соглашение, по которому программа,  редназначенная  для  использования  в  конвейере,  должна  получать входные  данные  из  стандартного  потока  ввода  (stdin  или  файл  0)  и  заносить  результаты  их  обработки  в  стандартный  поток  вывода  (stdout  или  файл  1).

Каким образом можно создавать фрагментированные файлы, содержащие пустые области?

Совместное  использование  функций  lseek()  и  write() позволяет  создавать  фрагментированные  файлы,  содержащие  пустые  области,  в которые никогда не осуществлялась запись данных.  

4. Выводы

В данной работе была исследованы взаимодействия с файловыми системами WINDOWS и UNIX.


 

А также другие работы, которые могут Вас заинтересовать

37187. Денежная масса 93.5 KB
  Вместе с тем денежная масса включает в себя такие компоненты которые нельзя непосредственно использовать как покупательное или платежное средство. Как правило денежная политика страны выходящей из политического или экономического кризиса начинается с восстановления доверия населения путем индексации таких âзамороженных вкладовâ и привлечения таким образом средств для оживления инвестиционной активности в экономике. Чаще всего используют следующие агрегаты[1]: М0 = наличные деньги в обращении М1 = М0 чеки вклады до востребования...
37188. Инфляция и причины ее возникновения 35.5 KB
  Инфляция связана с âзаболеваниемâ денег но причины инфляции очень глубинные. Инфляция это обесценение денег всвязи с нарушением закона денежного обращения. инфляция вздутие т.
37189. Необходимость и сущность кредита. Структура кредита 31 KB
  Структура кредита Кредит выступает как передача во временное пользование определенных стоимостей которые могут быть либо в виде материальных ценностей либо денежных средств. Необходимость кредита определяется двумя группами причин: 1. Общие объясняют необходимость кредита во всех общественноэкономических формациях: а наличие товарного производства и товарного обращения б функционирование денег как средства платежа в продажа товаров в кредит с отсрочкой платежа.
37190. Природа ссудного процента и его экономическая роль. Норма ссудного процента 28.5 KB
  хозрасчетной деятельностью предприятий и организаций: проценты уплачиваемые предприятиями должны стимулировать рациональное использование кредита и своевременное погашение ссуд. виды Проценты основной доход лиц делающих сбережения. Лицо делающее сбережения получает проценты в обмен на размещение на счете свободных средств. Для делающего сбережения лица проценты полученные в течение данного периода являются текущим доходом за этот период.
37191. Понятие банковской системы, ее элементы. Банк как элемент банковской системы 32 KB
  Банк как элемент банковской системы Банковская система совокупность банковских учреждений. Различия в понимании банка как исходного элемента банковской системы. в странах с развитой банковской системой банки осуществляют страховые ипотечные операции трастовое обслуживание используют закладные приобретают биржевые и маклерские конторы.
37192. Основы организации безналичных расчетов. Каналы движения денег безналичного оборота 34 KB
  На Центральный банк РФ как главный регулирующий орган платежной системы возложены обязанности по установлению правил сроков и стандартов осуществления расчетов с соблюдением следующих принципов их организации: 1. Правовой режим осуществления расчетов и платежей. Общий порядок осуществления расчетов на территории Российской Федерации регулируется Гражданским кодексом РФ ст.
37193. Финансовое обеспечение инвестиций в основные средства (фонды) предприятий 48.5 KB
  По действующему законодательству инвестиционная деятельность на территории Российской Федерации может финансироваться за счет: собственных финансовых ресурсов и внутрихозяйственных резервов инвестора прибыли амортизационных отчислений денежных накоплений и сбережений граждан и юридических лиц средств выплачиваемых органами страхования в виде возмещения потерь от аварий стихийных бедствий и других средств; заемных финансовых средств инвестора или переданных им средств банковские и бюджетные кредиты облигационные займы и другие...
37194. Инвестиционный проект 56.5 KB
  Понятие инвестиционного проекта трактуется двояко: 1 как деятельность мероприятие предполагающая осуществление комплекса какихлибо действий обеспечивающих достижение определенных целей; 2 как система включающая определенный набор организационноправовых и расчетнофинансовых документов необходимых для осуществления какихлибо действий или описывающих эти действия. В Федеральном законе Об инвестиционной деятельности в Российской Федерации осуществляемой в форме капитальных вложений дано такое определение инвестиционного проекта:...
37195. Сущность инвестиций 47 KB
  N 160ФЗ Об иностранных инвестициях в Российской Федерации Федеральный закон N 39ФЗ О рынке ценных бумаг а также отдельные указы Президента РФ отдельные постановления Правительства РФ и отдельные ведомственные нормативные акты органов исполнительной власти. Закон РФ Об иностранных инвестициях в РФ от 09. Настоящий Федеральный закон определяет основные гарантии прав иностранных инвесторов на инвестиции и получаемые от них доходы и прибыль условия предпринимательской деятельности иностранных инвесторов на территории Российской...