signal
Sinyalere özel bir handler tanımlanır. Başarılı ise tanımlı handler döner.
Syntax
__sighandler_t signal(int sig, __sighandler_t hnd);Params
- sig: Sinyal tanımları alır.
- hnd: Bir callback function alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int isrunning = 1;
void callback_handler(int num)
{
isrunning = 0;
}
int main(int argc, char** argv)
{
int count = 0;
signal(SIGINT, callback_handler); /// Ctrl+C sinyalini yakala
while(isrunning)
{
printf("\rCount: %d", count);
count++;
}
return 0;
}example.txt
SIGINT # Interactive attention signal.
SIGILL # Illegal instruction.
SIGABRT # Abnormal termination.
SIGFPE # Erroneous arithmetic operation.
SIGSEGV # Invalid access to storage.
SIGTERM # Termination request.
SIGHUP # Hangup.
SIGQUIT # Quit.
SIGTRAP # Trace/breakpoint trap.
SIGKILL # Killed.
SIGBUS # Bus error.
SIGSYS # Bad system call.
SIGPIPE # Broken pipe.
SIGALRM # Alarm clock.
SIGURG # Urgent data is available at a socket.
SIGSTOP # Stop, unblockable.
SIGTSTP # Keyboard stop.
SIGCONT # Continue.
SIGCHLD # Child terminated or stopped.
SIGTTIN # Background read from control terminal.
SIGTTOU # Background write to control terminal.
SIGPOLL # Pollable event occurred (System V).
SIGXCPU # CPU time limit exceeded.
SIGXFSZ # File size limit exceeded.
SIGVTALRM # Virtual timer expired.
SIGPROF # Profiling timer expired.
SIGUSR1 # User-defined signal 1.
SIGUSR2 # User-defined signal 2.
SIGWINCH # Window size change (4.3 BSD, Sun).sigismember
Her hangi bir sinyalin sigset_t içerisinde olup olmadığını kontrol eder. Başarılı ise 1 başarısız ise 0 değerini döner.
Syntax
int sigismember(const sigset_t* set, int signo); // linux systemsParams
- set: sigset_t değeri alır.
- signo: Sinyal tanımları alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int main(int argc, char** argv)
{
sigset_t set;
if(sigismember(&set, SIGINT))
printf("Sinyal mevcut.");
return 0;
}sigfillset
Tüm sinyaleri sigset_t içerisine ekler. Başarılı ise 0 değerini döner.
Syntax
int sigfillset(sigset_t* set); // linux systemsParams
- set: sigset_t değeri alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int main(int argc, char** argv)
{
sigset_t set;
sigfillset(&set);
if(sigismember(&set, SIGINT))
printf("Sinyal mevcut.");
return 0;
}sigemptyset
Tüm sinyaleri sigset_t içerisinden boşaltır. Başarılı ise 0 değerini döner.
Syntax
int sigemptyset(sigset_t* set); // linux systemsParams
- set: sigset_t değeri alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int main(int argc, char** argv)
{
sigset_t set;
sigfillset(&set); /// Önce doldur
sigemptyset(&set); /// Sonra boşalt
if(sigismember(&set, SIGINT)) /// Kontrol et
printf("Sinyal mevcut.");
return 0;
}sigaddset
Belirli bir sinyali sigset_t içerisine ekler. Başarılı ise 0 değerini döner.
Syntax
int sigaddset(sigset_t* set, int signo); // linux systemsParams
- set: sigset_t değeri alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int main(int argc, char** argv)
{
sigset_t set;
sigemptyset(&set); /// Önce boşalt
sigaddset(&set, SIGINT); /// Sonra ekle
if(sigismember(&set, SIGINT)) /// Kontrol et
printf("Sinyal mevcut.");
return 0;
}sigdelset
Belirli bir sinyali sigset_t içerisinden siler. Başarılı ise 0 değerini döner.
Syntax
int sigdelset(sigset_t* set, int signo); // linux systemsParams
- set: sigset_t değeri alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int main(int argc, char** argv)
{
sigset_t set;
sigemptyset(&set); /// Önce boşalt
sigaddset(&set, SIGINT); /// Sonra ekle
sigdelset(&set, SIGINT); /// Sonra sil
if(sigismember(&set, SIGINT)) /// Kontrol et
printf("Sinyal mevcut.");
return 0;
}sigprocmask
Belirli sinyallerin işlenmesini engellemek veya eski hale getirmek için kullanılır. Başarılı ise 0 değerini döner.
Syntax
int sigprocmask(int how, const sigset_t* set, sigset_t* oset); // linux systemsParams
- how: Sinyal engel tanımları alır.
- set: sigset_t değeri alır.
- oset: sigset_t değeri alır.
example.cpp
#include <stdio.h>
#include <signal.h>
int main(int argc, char** argv)
{
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGINT);
// Sinyali engelle
sigprocmask(SIG_BLOCK, &set, NULL);
// Sinyal engelini kaldır.
sigprocmask(SIG_UNBLOCK, &set, NULL);
return 0;
}example.txt
SIG_BLOCK # Block signals.
SIG_UNBLOCK # Unblock signals.
SIG_SETMASK # Set the set of blocked signals.sigaction
Sinyalere özel bir handler tanımlanır. Başarılı ise 0 değerini döner.
Syntax
int sigaction(int sig, const struct sigaction* act, struct sigaction* oact); // linux systemsParams
- sig: Sinyal tanımları alır.
- act: Sigaction struct alır.
- oact: Sigaction struct alır.
example.cpp
#include <string.h>
#include <ctype.h>
int isrunning = 1;
void callback_handler(int sig)
{
isrunning = 0;
}
int main(int argc, char** argv)
{
struct sigaction sa;
sa.sa_handler = callback_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
int count = 0;
printf("%d\n", sigaction(SIGINT, &sa, NULL)); /// Ctrl+C sinyalini yakala
while(isrunning)
{
printf("\rCount: %d", count);
count++;
}
return 0;
}