История изменений
Исправление metawishmaster, (текущая версия) :
пропускаю '\r' и escape-символ, который каким-то чудом оказывался в конце:
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int f_in, pid, N, M;
void sigper(int n)
{
char c;
if (n != SIGUSR1 && n != SIGALRM)
return;
printf("SIG%s\n", n == SIGUSR1 ? "USR1" : "ALRM");
while (read(f_in, &c, 1) == 1)
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
char inp;
ssize_t ret;
if (argc < 4) {
printf("error: insuffucient arguments\n");
return 1;
}
if ((f_in = open(argv[1], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) {
printf("Can't open %s\n", argv[1]);
return 1;
}
N = atoi(argv[2]);
M = atoi(argv[3]);
if ((pid = fork()) < 0) {
printf("Can't fork\n");
} else if (pid == 0) {
do {
ret = read(0, &inp, 1);
if (inp == '\r' || inp == '\n' || ret <= 0)
break;
if (i < N && inp != 27) {
write(f_in, &inp, 1);
i++;
}
} while (ret > 0);
lseek(f_in, 0, SEEK_SET);
kill(pid, SIGUSR1);
} else {
signal(SIGUSR1, sigper);
signal(SIGALRM, sigper);
alarm(M);
pause();
}
close(f_in);
return (0);
}
надеюсь, все, но если будут вопросы - спрашивай
Исправление metawishmaster, :
пропускаю '\r' и escape-символ, который каким-то чудов оказывался в конце:
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int f_in, pid, N, M;
void sigper(int n)
{
char c;
if (n != SIGUSR1 && n != SIGALRM)
return;
printf("SIG%s\n", n == SIGUSR1 ? "USR1" : "ALRM");
while (read(f_in, &c, 1) == 1)
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
char inp;
ssize_t ret;
if (argc < 4) {
printf("error: insuffucient arguments\n");
return 1;
}
if ((f_in = open(argv[1], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) {
printf("Can't open %s\n", argv[1]);
return 1;
}
N = atoi(argv[2]);
M = atoi(argv[3]);
if ((pid = fork()) < 0) {
printf("Can't fork\n");
} else if (pid == 0) {
do {
ret = read(0, &inp, 1);
if (inp == '\r' || inp == '\n' || ret <= 0)
break;
if (i < N && inp != 27) {
write(f_in, &inp, 1);
i++;
}
} while (ret > 0);
lseek(f_in, 0, SEEK_SET);
kill(pid, SIGUSR1);
} else {
signal(SIGUSR1, sigper);
signal(SIGALRM, sigper);
alarm(M);
pause();
}
close(f_in);
return (0);
}
надеюсь, все, но если будут вопросы - спрашивай
Исправление metawishmaster, :
пропускаю escape-символ, который каким-то чудов оказывался в конце:
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int f_in, pid, N, M;
void sigper(int n)
{
char c;
if (n != SIGUSR1 && n != SIGALRM)
return;
printf("SIG%s\n", n == SIGUSR1 ? "USR1" : "ALRM");
while (read(f_in, &c, 1) == 1)
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
char inp;
ssize_t ret;
if (argc < 4) {
printf("error: insuffucient arguments\n");
return 1;
}
if ((f_in = open(argv[1], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) {
printf("Can't open %s\n", argv[1]);
return 1;
}
N = atoi(argv[2]);
M = atoi(argv[3]);
if ((pid = fork()) < 0) {
printf("Can't fork\n");
} else if (pid == 0) {
do {
ret = read(0, &inp, 1);
if (inp == '\r' || inp == '\n' || ret <= 0)
break;
if (i < N && inp != 27) {
write(f_in, &inp, 1);
i++;
}
} while (ret > 0);
lseek(f_in, 0, SEEK_SET);
kill(pid, SIGUSR1);
} else {
signal(SIGUSR1, sigper);
signal(SIGALRM, sigper);
alarm(M);
pause();
}
close(f_in);
return (0);
}
надеюсь, все, но если будут вопросы - спрашивай
Исправление metawishmaster, :
пропускаю escape-символ, который каким-то чудов оказывался в конце:
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int f_in, pid, N, M;
void sigper(int n)
{
char c;
if (n != SIGUSR1 && n != SIGALRM)
return;
printf("SIG%s\n", n == SIGUSR1 ? "USR1" : "ALRM");
while (read(f_in, &c, 1) == 1)
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
char inp;
ssize_t ret;
if (argc < 4) {
printf("error: insuffucient arguments\n");
return 1;
}
if ((f_in = open(argv[1], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) {
printf("Can't open %s\n", argv[1]);
return 1;
}
N = atoi(argv[2]);
M = atoi(argv[3]);
if ((pid = fork()) < 0) {
printf("Can't fork\n");
} else if (pid == 0) {
do {
ret = read(0, &inp, 1);
if (inp == '\n' || ret <= 0)
break;
if (i < N && inp != 27) {
write(f_in, &inp, 1);
i++;
}
} while (ret > 0);
lseek(f_in, 0, SEEK_SET);
kill(pid, SIGUSR1);
} else {
signal(SIGUSR1, sigper);
signal(SIGALRM, sigper);
alarm(M);
pause();
}
close(f_in);
return (0);
}
надеюсь, все, но если будут вопросы - спрашивай
Исправление metawishmaster, :
пропускаю escape-символ, который каким-то чудов оказывался в конце:
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int f_in, fd, pid, N, M;
void sigper(int n)
{
char c;
if (n != SIGUSR1 && n != SIGALRM)
return;
printf("SIG%s\n", n == SIGUSR1 ? "USR1" : "ALRM");
while (read(f_in, &c, 1) == 1)
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
char inp;
ssize_t ret;
if (argc < 4) {
printf("error: insuffucient arguments\n");
return 1;
}
if ((f_in = open(argv[1], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) {
printf("Can't open %s\n", argv[1]);
return 1;
}
N = atoi(argv[2]);
M = atoi(argv[3]);
if ((pid = fork()) < 0) {
printf("Can't fork\n");
} else if (pid == 0) {
do {
ret = read(0, &inp, 1);
if (inp == '\n' || ret <= 0)
break;
if (i < N && inp != 27) {
write(f_in, &inp, 1);
i++;
}
} while (ret > 0);
lseek(f_in, 0, SEEK_SET);
kill(pid, SIGUSR1);
} else {
signal(SIGUSR1, sigper);
signal(SIGALRM, sigper);
alarm(M);
pause();
}
close(f_in);
return (0);
}
надеюсь, все, но если будут вопросы - спрашивай
Исходная версия metawishmaster, :
пропускаю escape-символ, который каким-то чудов оказывался в конце:
#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <ctype.h>
int f_in, fd, pid, N, M;
void sigper(int n)
{
char c;
if (n != SIGUSR1 && n != SIGALRM)
return;
printf("SIG%s\n", n == SIGUSR1 ? "USR1" : "ALRM");
while (read(f_in, &c, 1) == 1)
write(1, &c, 1);
}
int main(int argc, char *argv[])
{
int i = 0;
char inp;
ssize_t ret;
if (argc < 4) {
printf("error: insuffucient arguments\n");
return 1;
}
if ((f_in = open(argv[1], O_CREAT | O_RDWR, S_IRUSR | S_IWUSR)) < 0) {
printf("Can't open %s\n", argv[1]);
return 1;
}
N = atoi(argv[2]);
M = atoi(argv[3]);
if ((pid = fork()) < 0) {
printf("Can't fork\n");
} else if (pid == 0) {
do {
ret = read(0, &inp, 1);
if (inp == '\n' || ret <= 0)
break;
if (i < N && inp != 27) {
write(f_in, &inp, 1);
i++;
}
} while (ret > 0);
lseek(f_in, 0, SEEK_SET);
kill(pid, SIGUSR1);
} else {
signal(SIGUSR1, sigper);
signal(SIGALRM, sigper);
alarm(M);
pause();
}
close(f_in);
return (0);
}
надеюсь, все, но если будут вопросы - спрашивай