Добрый день. Надо при наступлении 2ого прерывания от клавиатуры вывести содержимое кореневого каталога. в freeBSD 4.5 при нажатии ctrl+c на экране появляется "^C", тогда как в openSuse 10 все ок. Как исправить? Препод говорил что проблема в sigsetjmp(obl,1); (не там поставил). Пробовал в другом месте поставить - результата нет( . Вот сама лаба:
#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
int a=20; //переменные для сортировки
int b=0;
int count=0;
int str=0;
char letter;
char endl;
int probel=0;
sigjmp_buf obl;
main()
{void sig_vec(); //процедура обработки прерываний
void sort();
signal(SIGINT, sig_vec); //при нажатии crtl+c запускается процедура sig_vec
system("who | tee b.txt");
sigsetjmp(obl,1);
sleep(2);
if (fork()==0)
{sort();
sigsetjmp(obl,1);}
else
b=0;
a=10;
}
void sig_vec()
{
count=count+1;
signal(SIGINT, sig_vec);
if (count==2) // щелкнули 2 раза - вывели корневой каталог
{system("ls /");
count=0;
}
siglongjmp(obl,1);
}
void sort()
{
FILE *fp;
sigsetjmp(obl,1);
if((fp = fopen("b.txt","r"))==NULL)
{
puts("cannot open file");
}
while( ((letter = fgetc(fp)) !=EOF))
{ while (letter!=' ')
{letter=fgetc(fp);}
while (letter==' ')
{letter=fgetc(fp);}
while (letter!=' ')
{printf("%c",letter);
letter=fgetc(fp);}
while (letter!='\n')
{letter=fgetc(fp);}
printf("\n");
}
}