|
Комиссия 1
1) Написать программу на СИ, реализующую командную строку NAME1| NAME2. Программа вызывается командной строкой: PROGRAM NAME1 NAME2. Предусмотреть обработку ошибок (отсутствие файлов, неправильное количество параметров).
2) Написать программу на СИ, обрабатывающую каждое четное возникновение сигнала SIGTRAP формированием двух сыновних процессов, связанных каналом.
Комиссия 2 (примерно)
1) Инвертирование файла.
2) Процесс внук имеет доступ к единственному файлу NAME2, в процессе
правнук создать инвертируемую копию файла NAME2 в файле NAME3.
Обмен информации происходит через канал.
Комиссия 3
Тоже самое что и комиссия 1.
Комиссия 4
1) Написать программу, определяющую количество литер, слов и строк в тексте,
состоящем из нечетных N-ok байт заданного файла. Для подсчета количества
литер, слов и строк использовать команды SHELL – wc. Результаты
поместить в файл. Имена файлов и величина N задаются в командной строке.
2) Написать программу, выдающую на экран содержимое файла порциями по N
строк; каждая последующая порция выдается после нажатия клавиш “CTRL +
C”. Имя файла и величина N задаются в командной строке.
Комиссия 5
Тоже самое что и комиссия 3.
к 1 н1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
struct stat buffer1, buffer2;
int main(int argc, char **argv){
int fd[2];
if (argc == 3){
if ((lstat (argv[1], &buffer1)!= -1) || (lstat (argv[2], &buffer2)!= -1)){
pipe(fd);
if (fork()){
dup2(fd[1], 1);
close(fd[1]);
close(fd[0]);
execlp(argv[1], argv[1], NULL);
}
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
execlp(argv[2], argv[2], NULL);
}
else
printf("faila net\n");
}
else
printf("nevernoe kolichestvo argumentov\n");
return 0;
}
к1 н2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int fl = 0;
void SigHndlr(int s){
signal(SIGINT, SigHndlr);
int fd[2], fd2[2];
++fl;
if (!(fl % 2)){
printf("chet\n");
pipe (fd);
if (!fork()) {
dup2(fd[1], 1);
close(fd[0]);
close(fd[1]);
system("ls");
exit(0);
}
if (!fork()) {
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
system("wc");
exit(0);
}
close(fd[0]);
close(fd[1]);
}
}
int main(int argc, char **argv)
{
system("ls");
signal(SIGINT, SigHndlr);
while(1) sleep(1);
return 0;
}
к2 н1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
FILE *f1;
FILE *f2;
void rec()
{
if (!feof(f1)) {
char c;
c = fgetc(f1);
rec();
fputc(c, f2);
}
}
int main(int argc, char **argv)
{
f1 = fopen(argv[1], "r");
f2 = fopen(argv[2], "w");
rec();
return 0;
}
к2 н2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int f1, f2;
int buf[256], sim[256];
void rec()
{
int c;
if ((c = fgetc(stdin))!= EOF) {
rec();
fputc(c, stdout);
}
}
void out()
{
int c;
while ((c = fgetc(stdin))!= EOF) {
fputc(c, stdout);
}
}
int main(int argc, char **argv){
int fd[2];
pipe (fd);
if (!fork()){ // сын
if (!fork()){ // внук
if (!fork()) { //правнук
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
f2 = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC);
dup2(f2, 1);
close(f2);
out();
return 0;
}
dup2(fd[1], 1);
close(fd[0]);
close(fd[1]);
f1 = open(argv[1], O_RDONLY);
dup2(f1, 0);
close(f1);
rec();
return 0;
}
close(fd[0]);
close(fd[1]);
return 0;
}
close(fd[0]);
close(fd[1]);
return 0;
к4 н1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int f1, f2;
int per;
int send(int N){
int c;
int fl = 0;
int count = 0;
while ((c = fgetc(stdin))!= EOF) {
if((count < N) && (!(fl % 2)))
fputc(c, stdout);
count ++;
if (count == N) {
fl = fl + 1;
count = 0;
}
}
return 0;
}
int main(int argc,char **argv){
int t;
int fd[2];
pipe(fd);
if (!fork()){
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
f2 = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC);
dup2(f2, 1);
close(f2);
execlp("wc", "wc", NULL);
return -1;
}
f1 = open(argv[1], O_RDONLY);
dup2(f1, 0);
close(f1);
dup2(fd[1], 1);
close(fd[0]);
close(fd[1]);
per = argv[3][0] - '0';
send(per);
return 0;
}
к4 н2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int N;
void SigHndlr(int s){
int c;
int count = 0;
while(count < N){
c = fgetc(stdin);
if (c == EOF)
exit(0);
fputc(c, stdout);
if (c == '\n')
count ++;
}
}
int main(int argc, char **argv){
int f1 = open(argv[1], O_RDONLY);
dup2(f1,0);
close(f1);
N = (argv[2][0] - '0');
signal(SIGINT, SigHndlr);
while(1);
return 0;
}
Дата добавления: 2015-11-04; просмотров: 30 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Уважаемые коллеги, приглашаем Вас к сотрудничеству! | | | Каждое предприятие в своей деятельности использует автотранспортные средства. Служебный автотранспорт подразделяется на собственный и арендованный. Служебный автотранспорт чаще всего приобретается в |