私はシグナルを処理するシェルプログラムを作成しています。次のように関連するコードを扱う私の関連する信号は次のとおりです。Linuxでsignal.hを使用してコンパイルエラーを発生させる
#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);
コンパイルは私に次の警告やエラーを与える:私はこれらの警告やエラーを得ている理由
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'
誰も教えてもらえますか?
'-ansi'を削除すると、 ' /tmp/ccl4HmT7.o:function main': ' '/home/stu1/s11/gaw9451/Courses/OS_3/os1shell2.c:68:未定義 'ハンドラ関数への参照 ' ' collect2:ldが1を返しました。終了ステータス ' ' -D_POSIX_C_SOURCE'を追加することは同じです。これについての任意のアイデア? – Ataraxia
どこにでも 'handler_function'が定義されていますか?あなたの質問では宣言されていますが、コードはありません。私は 'void handler_function(int signal_id){}'を追加しなければなりませんでした。そしてあなたのコードはうまくコンパイルされました。 –