Работа с файловой системой на удаленном компьютере через последовательный порт

Страницы работы

Содержание работы

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

Государственное образовательное учреждение высшего профессионального

образования «Комсомольский - на - Амуре государственный технический университет»

Факультет компьютерных технологий

Кафедра МОП ЭВМ

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

по курсу «Сети и телекоммуникации»

Выполнил студент гр. 1ВТ-1:                                                   Бабанаков А.Е.

Преподаватель:                                                                    Могильников Е. В.

Вариант:                                                                                                            1

2005

Тема: Работа с файловой системой на удаленном компьютере через последовательный порт.

Задание: Два компьютера соединены 0-модемным кабелем через последовательные порты. Написать программу просмотра оглавления текущего каталога (DIR), смены текущего каталога (CD) на другом компьютере и передачи выбранного файла с другого компьютера через последовательный порт с параметрами связи по вариантам.

Номер

варианта

Вид передачи

Количество стоповых бит

Контроль

четности

Скорость обмена (бод)

1

по прерыванию

2

По четности

600

Теоретическийматериал.

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

OpenSerial( COM_1,//использование порта СОМ1

SER_BAUD_600,//скорость передачи

SER_STOP_2//кол-во стоповых бит

|SER_BITS_8//кол-во бит в кадре

|SER_PARITY_ODD);//установка контроля чётности

1.  Просмотр оглавления текущего каталога(DIR).

void exec_dir(void)

{

struct ffblk ffblk;

int done;

_puts("Directory listing of *.*\r\n");

//заполняем структуру    

done = findfirst("*.*", &ffblk, FA_DIREC);

while (!done) {

char scratch[80];

//если каталог 

if (ffblk.ff_attrib & FA_DIREC)

{

sprintf(scratch, "  %-12s  <DIR>\r\n", ffblk.ff_name);

}

//если файл  

else

{

sprintf(scratch, "  %-12s  %d\r\n", ffblk.ff_name, ffblk.ff_fsize);

}

_puts(scratch);

done = findnext(&ffblk);

}

}

2.  Смена текущего каталога(CD).

void exec_cd(char * d)

{

char buf[128];

if (d != NULL) chdir(d);

//функция смены текущего каталога

getcwd(buf, 128);

_puts(buf);

_puts("\r\n");

}

3.  Копирование выбранного каталога.

void exec_copy(char *k)

{

char * fname;

char *a="File Name:";

char *b="File Date:";

int    i;

FILE * inf;

strcpy(fname,k);

inf = fopen(fname, "rb");

printf("Transfering filename...\n");

for (i = 0; a[i]; i++) WriteSer(a[i]);

_puts("\r\n");

for (i = 0; fname[i]; i++) WriteSer(fname[i]);

_puts("\r\n");

for (i = 0; b[i]; i++) WriteSer(b[i]);

_puts("\r\n");

WriteSer(0);

//transfer file data

printf("Transfering file data...\n");

while (1) {

int c = fgetc(inf);

if (feof(inf)) break;

switch(c) {

case 0xC0 : WriteSer(0xDB); WriteSer(0xDC); break;

case 0xDB : WriteSer(0xDB); WriteSer(0xDD); break;

default   : WriteSer(c); break;

}

}

printf("Sending EOF...\n");

WriteSer(0xC0);

CloseSerial();

fclose(inf);

}

Листингпрограммы.

Листинг клиентской программы:

#include <conio.h>

#include <stdio.h>

#include <dir.h>

#include <string.h>

#include <dos.h>

#include "comm.cc"  //Include shared module

/* We use this to receive a string from serial link */

char * _gets(char * s)

{

int c;

int do_some_job = 1;

char * t = s;

while (do_some_job) {

while (DataReadyCount() == 0);

c = ReadQueue();

putch(c);

switch(c) {

case 13 :           //If enter - finish input

putch(10);

*t++ = '\0';

do_some_job = 0;

break;

case 8 :            // This is a backspace - remove last character

if (t != s) t--;

break;

default :

*t++ = c;

}

}

return s;

}

/* We use this function to output a string to serial console */

void _puts(char * s)

{

while (*s) {

putch(*s);

WriteSer(*s++);

}

}

void exec_copy(char *k)

{

char * fname;

char *a="File Name:";

char *b="File Date:";

int    i;

FILE * inf;

strcpy(fname,k);

inf = fopen(fname, "rb");

printf("Transfering filename...\n");

for (i = 0; a[i]; i++) WriteSer(a[i]);

_puts("\r\n");

for (i = 0; fname[i]; i++) WriteSer(fname[i]);

_puts("\r\n");

for (i = 0; b[i]; i++) WriteSer(b[i]);

_puts("\r\n");

WriteSer(0);

//transfer file data

printf("Transfering file data...\n");

while (1) {

int c = fgetc(inf);

if (feof(inf)) break;

switch(c) {

case 0xC0 : WriteSer(0xDB); WriteSer(0xDC); break;

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
95 Kb
Скачали:
0