Bash kabuğunu taklit edecek bir program yazmam gerekiyor. Programın ilgili bölümleri burada. Program, EOF'un alımında sona erer (gösterilmiyor). Uygulanacak farklı özelliklerden biri, CTRL-C'ye basıldığında programı sonlandırmamaktır. SIGINT alındığında program yeni bir komut istemi yazdırmalıdır. Mevcut döngü iterasyonunu sona erdirmek için global bir değişkeni değiştiren bir işleyici işlevim ve iç döngüye yeniden girmek için tekrar değiştirecek bir dış döngü var. Ancak, CTRL-C'ye bastığımda program hala çalışmıyor. Bu neden?Sinyal işleme fonksiyonu + göz ardı edilmiyor SIGINT
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<time.h>
#include<signal.h>
#include<sys/wait.h>
void SIGINT_handler(int signum);
static volatile sig_atomic_t endflag = 0;
int main(int argc, char **argv){
while(1){
endflag = 0;
while(!endflag){
struct sigaction action;
action.sa_handler = &SIGINT_handler;
action.sa_flags = 0;
if((sigemptyset(&action.sa_mask) == -1)||(sigaction(SIGINT, &action, NULL) == -1)){
perror("Failed to set SIGINT handler");
exit(EXIT_FAILURE);
}
}
}
return 0;
}
void SIGINT_handler(int signo){
if(signo == SIGINT){
endflag = 1;
}
fflush(stdout);
}
kod az ya da çok normal gibi deneyin ana işlevi
girmek hemen sonra
. Derleme sırasında herhangi bir uyarı alır mısınız? Hangi işletim sistemi kullanıyorsunuz? – alk
Bir sinyal kolundan 'stdout' basması iyi bir fikir olmayabilir. Ayrıca küresel bayrağı 'volatile' tanımlaması gerektiğinden şüphe duyuyorum. – alk
İşletim sistemi ve derleyici yüklemeniz gerekiyor, bu Mac üzerinde gcc ve clang ile çalışıyor. – Harry