Tôi đang viết chương trình vỏ phải xử lý tín hiệu. có liên quan xử lý mã tín hiệu liên quan của tôi là như sau:biên dịch lỗi bằng cách sử dụng signal.h trong Linux
#include <signal.h>
...
#include <sys/types.h>
...
void installSigactions(int, struct sigaction*);
void handler_function(int signal_id);
...
/*define signal table*/
struct sigaction signal_action;
/*insert handler function*/
signal_action.sa_handler = handler_function;
/*init the flags field*/
signal_action.sa_flags = 0;
/*are no masked interrupts*/
sigemptyset(&signal_action.sa_mask);
/*install the signal_actions*/
sigaction(SIGINT, &signal_action, NULL);
Biên dịch mang lại cho tôi những lời cảnh báo và các lỗi sau đây:
gcc -Wall -ggdb -ansi -static -pedantic -o os1shell2 os1shell2.c
os1shell2.c:35: warning: 'struct sigaction' declared inside parameter list
os1shell2.c:35: warning: its scope is only this definition or declaration,
which is probably not what you want
os1shell2.c: In function 'main':
os1shell2.c:66: error: storage size of 'signal_action' isn't known
os1shell2.c:75: warning: implicit declaration of function 'sigemptyset'
os1shell2.c:78: warning: implicit declaration of function 'sigaction'
bất cứ ai có thể cho tôi biết tại sao tôi nhận được những cảnh báo và lỗi?
xóa '-ansi' để lại cho tôi: ' /tmp/ccl4HmT7.o: Trong hàm main': ' '/home/stu1/s11/gaw9451/Khóa học/OS_3/os1shell2.c: 68: undefined' 'tham chiếu đến handler_function'' ' collect2: ld trả về 1 trạng thái thoát ' Việc thêm '-D_POSIX_C_SOURCE' làm tương tự. Bất kỳ ý tưởng về điều này? – Ataraxia
Bạn có 'handler_function' được định nghĩa ở bất kỳ đâu không? Nó được khai báo trong câu hỏi của bạn, nhưng không có mã cho nó. Tôi đã phải thêm 'void handler_function (int signal_id) {}', và sau đó mã của bạn được biên dịch tốt. –