Come catturare ctrl-c in lua quando ctrl-c viene inviato tramite la riga di comando



Answers

windows: SetConsoleCtrlHandler

linux: signal

Ci sono due comportamenti del segnale che sono indesiderabili, che causeranno complessità nel codice.

  1. Fine del programma
  2. IO rotto

Il primo comportamento può essere catturato e ricordato in un programma C utilizzando SetConsoleCtrlHandler / signal. Ciò consentirà di chiamare la funzione e ricordare che il sistema deve essere arrestato. Quindi, ad un certo punto nel codice lua, vedi che è successo (chiama per controllare) ed esegui il tuo ordine e spegnimento.

Il secondo comportamento è che un'operazione di blocco (lettura / scrittura) verrà annullata dal segnale e l'operazione non verrà completata. Dovrebbe essere verificato a ogni evento IO e quindi riavviato o annullato a seconda dei casi.

Question

Vorrei sapere quando l'utente da una riga di comando preme control-c in modo da poter salvare alcune cose.

Come faccio a fare questo? Ho guardato ma non ho visto nulla.

Nota: ho una certa familiarità con lua, ma non sono esperto. Per lo più uso lua per usare la biblioteca Torch ( http://torch.ch/ )




require('sys')
sys.catch_ctrl_c()

Lo uso per catturare l'uscita da cli.