Đây là vấn đề: chương trình này sẽ nhận đầu vào từ stdin và đếm số byte được chèn vào; tín hiệu SIGUSR1 sẽ dừng chương trình chính và sẽ in ra lỗi chuẩn của tệp có bao nhiêu byte đã được sao chép khi tôi gửi SIGUSR1.Trình xử lý tín hiệu sẽ không thấy biến toàn cầu
Đó là cách giáo viên của tôi muốn tôi làm điều này: trong một loại thiết bị đầu cuối
cat /dev/zero | ./cpinout | cat >/dev/null
trong khi đi từ trạm thứ hai gửi tín hiệu với
kill -USR1 xxxx
trong đó xxxx là pid của cpinout.
tôi cập nhật mã trước đây của tôi:
/* cpinout.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#define BUF_SIZE 1024
volatile sig_atomic_t countbyte = 0;
volatile sig_atomic_t sigcount = 0;
/* my_handler: gestore di signal */
static void sighandler(int signum) {
if(sigcount != 0)
fprintf(stderr, "Interrupted after %d byte.\n", sigcount);
sigcount = contabyte;
}
int main(void) {
int c;
char buffer[BUF_SIZE];
struct sigaction action;
sigemptyset(&action.sa_mask);
action.sa_flags = 0;
action.sa_handler = sighandler;
if(sigaction(SIGUSR1, &action, NULL) == -1) {
fprintf(stderr, "sigusr: sigaction\n");
exit(1);
}
while(c=getc(stdin) != EOF) {
countbyte++;
fputc(c, stdout);
}
return(0);
}
Sẽ không làm việc ngay cả với sigaction>
elmazzun