Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shp.doc
Скачиваний:
12
Добавлен:
18.09.2019
Размер:
5.46 Mб
Скачать

21. Напишите программу создания и записи образов дискет

#include <stdio.h>

#include <fcntl.h>

void fdread(char *file)

{int fdin, fdout, kp;

char buf [512];

fdout=open(file, O_WRONLY | O_CREAT | O_TRUNC, 0640);

if (fdout==-1) {printf("Невозможно создать %s файл\n", file);return;}

fdin=open("/dev/fd0", O_RDONLY);

while ((kp=read(fdin, buf,512))>0) write (fdout, buf, kp);

close (fdin);

close (fdout);}

void fdwrite(char *file){

int fdin, fdout, kp;

char buf [512];

fdin=open(file, O_RDONLY, 0640);

if (fdin==-1){printf("Невозможно открыть %s файл\n", file);return;}

fdout=open("/dev/fd0", O_WRONLY);

while ((kp=read(fdin, buf,512))>0) write (fdout, buf, kp);

close (fdin);

close (fdout);

}

main (int argc, char * argv[])

{if (argc!=3)

{printf("Используйте %s [-r-w] файл\n", argv[0]);

exit(0);

}

if (strcmp(argv[1],"-r")==0)

fdread(argv[2]);

else if (strcmp(argv[1],"-w")==0)

fdwrite(argv[2]);

else printf("Ключ не -r и не -w\n");

}

22. Напишите функции включения и выключения режима эхо-отображения набираемых на клавиатуре символов

#include <stdio.h>

#include <termio.h>

#define SUCCESS 0

#define ERROR (-1)

/* Структура tsaved будет содержать параметры терминала */

static struct termios tsaved;

/* Равно TRUE если параметры сохранены */

static int saved = 0;

int tsave(void)

{if(isatty(0) && tcgetattr(0,&tsaved) >= 0)

{ saved = 1;

return (SUCCESS); }

return (ERROR);}

int tback(void) /* Восстанавливает состояние терминала */

{ if( !isatty(0) || !saved)

return (ERROR);

return tcsetattr(0, TCSAFLUSH, &tsaved);}

int echooff(void)

{static struct termios term;

if (isatty(0) && tcgetattr(0,&term) < 0)

{printf("Ошибка взаимодействия с терминалом!"); return(-1);

}

term.c_lflag &= ~ECHO;

printf("Echo-режим отключен!\n");

tcsetattr(0, TCSAFLUSH, &term);

return (1); }

int echoon(void)

{printf("Echo-режим включен!\n");

tcsetattr(0, TCSAFLUSH, &tsaved);

return (1); }

main()

{ char buf[256];

if(tsave() == 1)

{ fprintf(stderr, "Невозможно сохранить параметры

терминала\n");

exit(1); }

echooff();

printf("Попробуйте ввести строку:\n");

scanf("%s",buf);

printf("Введено %s\n", buf);

echoon();

printf("Попробуйте ввести строку:\n");

scanf("%s",buf);

tback();

exit(0);

} }

23. Напишите программу для запуска команды ls в качестве дочернего процесса

#include <sys/types.h>

#include <unistd.h>

main()

{pid_t pid;

Switch (pid = fork ())

{case -1

Fatal (“Ошибка вызова fork”);

Break;

Case 0

Execl (“/bin/ls”,”ls”,”%”,(char*)0);

Fatal (“Ошибка вызова execl ”);

Break;

Wait()

Printf(“программа ls завершилась ”)

Exit :

}}

24. Создайте два процесса, взаимодействующих через программный канал.

#include <unistd.h>

main()

{int k1[2], k2[2], pid; int c;

pipe(k1); pipe(k2);

pid=fork();

if (pid>0)

{close(k1[0]); close(k2[1]);

do

{c=getchar(c);

write(k1[1], &c, sizeof(c));

read(k2[0], &c, sizeof(c));

putchar(c);

}

while (c!=-1);

wait(0); }

else

{for (;;)

{read(k1[0], &c, sizeof(c));

if (c==-1) break;

if (islower(c)) c=toupper(c);

write(k2[1], &c, sizeof(c)); }

exit(0); } }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]