プログラムの SIGINT 呼び出しで使用できるように、いくつかの追加の引数を渡そうとしていますが、コンパイル エラーが発生します。これは実際に達成可能ですか?
それが達成可能であれば、誰かがここで私の間違いを説明してもらえますか;
void signal_handler(bool &txMode, char* &txData, int &sendresult, int &sockFD,_
char* &txBuffer, struct sockaddr_ll &socket_address);
int main(int argc, char *argv[]) {
unsigned char sourceMAC[6];
unsigned char destMAC[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
bool txMode = true;
char* txBuffer = (char*)operator new(ETH_FRAME_LEN);
unsigned char* txEtherhead = (unsigned char*)txBuffer;
struct ethhdr *eh = (struct ethhdr *)txEtherhead;
int sockFD;
char* txData = txBuffer + headersLength;
struct sockaddr_ll socket_address;
int sendresult = 0;
signal (SIGINT,signal_handler(txMode, txData, sendresult, sockFD, txBuffer,_
socket_address));
return 0;
}
void signal_handler(bool &txMode, char* &txData, int &sendresult, int &sockFD,_
char* &txBuffer, struct sockaddr_ll &socket_address) {
if(txMode==true) {
std::string param;
std::stringstream ss;
ss << "etheratedeath";
param = ss.str();
strncpy(txData,param.c_str(), param.length());
sendresult = sendto(sockFD, txBuffer, ETH_FRAME_LEN, 0,
(struct sockaddr*)&socket_address, sizeof(socket_address));
}
cout << "You killed me!" << endl;
}
コンパイル時に次のエラーが発生します。
user@machine:~/c/ethernet1$ gcc -o ethernet1 ethernet1.cpp -lrt
ethernet1.cpp: In function ‘int main(int, char**)’:
ethernet1.cpp:358: error: invalid use of void expression
これは main(); のこの行を参照します。
signal (SIGINT,signal_handler(txMode, txData, sendresult, sockFD, txBuffer, socket_address));