Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабораторки по ОС препод Челноков / 2семестр / wi1 / Tanya / labi2 / t31
.c#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
static int nsigs=0;
static void s(int sig);
int pid;
int i,k,j,d1,d2;
char buf1[10],buf2[10];
int fd1,fd2,fd3;
int choose(int from);
int main()
{
signal(SIGINT,&s);
fd1=open("f1.dat",O_RDONLY);
fd2=open("f2.dat",O_RDONLY);
fd3=open("f.dat",O_WRONLY);
read(fd1,&buf1,10);
d1=lseek(fd1,0,SEEK_CUR);
read(fd2,&buf2,10);
d2=lseek(fd2,0,SEEK_CUR);
k=0;
while(((d1%10)==0)&&((d2%10)==0))
{
i=0;
while((buf1[i]==buf2[i])&&(i<10))
i++;
if (buf1[i]<buf2[i])
{
write(fd3,&buf1,10);
k=choose(1);
printf("TEST1");
}
else
{
write(fd3,&buf2,10);
k=choose(2);
printf("TEST2");
}
switch(k)
{
case -1:{
// read(fd2,&buf2,10);
d2=lseek(fd2,0,SEEK_CUR);
while((d2%10)==0)
{
write(fd3,&buf2,10);
read(fd2,&buf2,10);
d2=lseek(fd2,0,SEEK_CUR);
}
}
case -2:{
// read(fd1,&buf1,10);
d1=lseek(fd1,0,SEEK_CUR);
while((d1%10)==0)
{
write(fd3,&buf1,10);
read(fd1,&buf1,10);
d1=lseek(fd1,0,SEEK_CUR);
}
}
case 1:;
case 2:;
default:;
}
}
while(1)
pause();
return(0);
}
int choose(int from)
{
switch(from)
{
case 1:
{read(fd1,&buf1,10);
d1=lseek(fd1,0,SEEK_CUR);
if((d1%10)==0)
return(1);
else
return(-1);
}
case 2:
{read(fd2,&buf2,10);
d2=lseek(fd2,0,SEEK_CUR);
if((d2%10)==0)
return(2);
else
return(-2);
}
}
}
void s(int sig)
{
signal(SIGINT,&s);
if(nsigs!=0)
{
if (nsigs==5)
signal(SIGINT,SIG_DFL);
else
switch(pid=fork())
{
case 0:execlp("wc","wc","f.dat",0);
default:;
}
}
nsigs=nsigs+1;
}