2013-03-17 2 views
0

Там что-то действительно озадачивает меня, основные коды следуето SIGALRM и сигнализации

char buffer[MAX_BUFFER+1]; 
    int ret; 
    signal(SIGALRM,wakeup); 
    printf("You have 3 seconds to enter the password\n"); 
    alarm(3); 
    ret=read(0,buffer,MAX_BUFFER); 
    alarm(0); 

Не могли бы вы сказать мне, почему нужно секунд сигнал (0) вот, что это значит? Спасибо !!!

+0

Иногда вы можете использовать 'poll' для таких вещей. –

ответ

5

Это потому, что вы можете ввести пароль за две секунды (например), так что вы не хотите, чтобы сигнал тревоги удалялся через секунду после этого. Другими словами, выключен Тревога в случае, когда вещь, которую вы пытаетесь перехватить, заканчивается до.

Выполнение alarm(0), когда текущий активный сигнал не является безопасным (кроме других проблем, таких как помехи sleep и т. Д., Но они здесь неважны).

Однако, если у вас есть мошенник SIGALRM, если вы его не ожидаете, это может привести к некоторому ущербу (например, если вы сбросили обработчик SIGALRM на что-то еще), поэтому безопаснее его отключить, даже если он истек. ,

+0

спасибо paxdiablo ^^ – CrazyLion