Aracılığıyla paylaş


signal

Kümeleri sinyal işleme kesme.

Önemli notÖnemli

Kapatmak için bu yöntemi kullanmayın bir Windows Mağazası app, test veya hata ayıklama senaryoları hariç.Programmatic veya kullanıcı Arabirimi yolları kapatmak için bir Windows Mağazası app 3.6 bölümüne göre verilmez Windows 8 app sertifikasyon gereksinimleri.Daha fazla bilgi için bkz: Uygulama Yaşam döngüsü (Windows Store apps).

void (__cdecl *signal(
   int sig, 
   void (__cdecl *func ) (int [, int ] ))) 
   (int);

Parametreler

  • sig
    Sinyal değeri.

  • func
    Çalıştırılacak işlev.İlk parametre bir sinyal değeri ve ikinci parametre ilk parametre SIGFPE olduğunda, kullanılabilir sub-code.

Dönüş Değeri

signalönceki değerini döndürür func verilen sinyal ile ilişkili.Örneğin, önceki değerini func olan SIG_IGN, dönüş değeri de olan SIG_IGN.Dönüş değeri SIG_ERR , bu durumda bir hata gösterir errno ayarlamak EINVAL.

Bkz: _doserrno, hatano, _sys_errlist ve _sys_nerr bu ve diğer hakkında daha fazla bilgi için kodlarını döndürür.

Notlar

signal İşlevi bir kesme sinyalini işletim sisteminden işlemek için çeşitli yollar birini seçmek bir işlem sağlar.sig Bağımsız değişken ise hangi kesme signal yanıt verir; SİNYAL içinde tanımlanan aşağıdaki bildirim sabitlerinden biri olmalıdır.H.

sigdeğer

Tanımlama

SIGABRT

Olağan dışı sona erdirme

SIGFPE

Kayan nokta hatası

SIGILL

Geçersiz yönerge

SIGINT

ctrl + c sinyali

SIGSEGV

Geçersiz bir depolama birimi erişimi

SIGTERM

Sonlandırma isteği

sig Biri değil, yukarıdaki değerleri geçersiz parametre işleyicisi, tanımlandığı şekilde çağrılır Parametre doğrulama .Bu işlev yürütülmesine devam etmek için izin verilirse, ayarlar errno için EINVAL ve SIG_ERR.

Varsayılan olarak, signal çıkış kodu 3, değeri ne olursa olsun çağıran programla sonlandırır sig.

[!NOT]

SIGINTherhangi bir Win32 uygulaması için desteklenmiyor.ctrl + c kesme oluştuğunda, Win32 işletim sistemi özellikle bu kesme işlemek için yeni bir iş parçacığı oluşturur.Bu bir tek iş parçacığı uygulama bir UNIX gibi çoklu iş parçacığı, beklenmeyen bir davranış kaynaklanan kullanan duruma gelmesine neden olabilir.

func Bağımsız değişken ise bir adresi yazdığınız bir Sinyal tutucusu veya önceden tanımlı sabitlerden birini SIG_DFL veya SIG_IGN, SİNYAL tanımlı de.H.func Bir işlevdir verilen sinyal için Sinyal tutucusu olarak yüklenir.Sinyal işleyicinin prototip bir biçimsel bağımsız değişken gerektirir sig, türü int.Gerçek bağımsız değişkeni aracılığıyla işletim sisteminin sağladığı sig bir kesme oluştuğunda; üretilen kesme sinyali bağımsız değişkenidir.Böylece, altı bildirim sabitler (yukarıdaki tabloda listelenen) içinde sinyal işleyicinizi belirlemek için hangi kesme oluştu ve uygun eylemi kullanabilirsiniz.Örneğin, arama signal sonra iki farklı sinyal için iki kez aynı işleyici atamak için test sig işleyicisi farklı eylemleri değişkeninde temel sinyal alındı.

Kayan nokta özel durumlar için sınıyorsanız (SIGFPE), func , isteğe bağlı ikinci bağımsız değişken alan bir işlev için puntodur float içinde tanımlanan çeşitli bildirim sabitlerinden biri.Formun h FPE_xxx.Zaman bir SIGFPE sinyal oluşur, sonra uygun eylemi gerçekleştirin ve kayan nokta özel durumu türünü belirlemek için ikinci bağımsız değişken değeri sınayın.Bu bağımsız değişkeni ve olası değerlerinin Microsoft uzantıları yer almaktadır.

Kayan nokta özel durumları, değeri func sinyal alındığında sıfırlanmaz.Kayan nokta özel durumlar kurtarmak için yan tümceleri dışında Yüzen çevreleyen işlemleri işaret / try kullanın.Kullanarak master'i geri mümkündür setjmp ile longjmp.Her iki durumda da, arama işlemi yürütme undefined kayan nokta durumu sol işlemi ile devam ettirir.

Sinyal tutucusu ise, arama işlemi Kesme sinyali aldığı noktayı hemen yürütme devam eder.Bu tür sinyal veya işletim modu ne olursa olsun doğrudur.

Belirtilen işlev yürütülmeden önce değeri func ayarlamak SIG_DFL.Sonraki Kesme sinyali için açıklandığı gibi değerlendirilir SIG_DFLbir araya giren gerektirmediği sürece, signal aksini.Bu özellik çağrılan işlev içinde sinyalleri sıfırlamanıza olanak sağlar.

Bir kesme oluştuğunda sinyal işleyicisi yordamlar genellikle zaman uyumsuz olarak adlandırılır çünkü bir çalıştırma işlemi tamamlanmamış ve bilinmeyen bir durumda olduğunda sinyal işleyicisi işlevinizde denetimini alabilirsiniz.Aşağıdaki liste, Sinyal tutucusu yordamında kullanabilirsiniz hangi işlevleri belirlemek kısıtlamaları özetler.

  • Değil alt düzey sorunu veya STDIO yapın.H g/ç yordamlarını (örneğin, printf ve fread).

  • Yığın düzenleri veya yığın yordamları kullanan herhangi bir yordamı çağırmak değil (örneğin, malloc, _strdup, ve _putenv).Bkz: malloc daha fazla bilgi için.

  • Bir sistem çağrısı ürettiği herhangi bir işlevi kullanmayın (örneğin, _getcwd, time).

  • Kullanmayın longjmp sürece kesme bir kayan nokta özel durumu neden olur (yani, sig olan SIGFPE).Bu durumda, ilk çağrı kayan nokta paketiyle yeniden _fpreset.

  • Herhangi bir kaplama yordamları kullanmayın.

Bir program yakalamak için ise kayan nokta kodu içermelidir SIGFPE işlevi ile özel durum.Program kodu kayan nokta olmayan ve çalışma zamanı kitaplığının sinyal işleme kodu gerektiriyorsa, yalnızca geçici bir çift bildirmek ve yaratıp sıfıra eşitleyin:

volatile double d = 0.0f; 

SIGILL Ve SIGTERM sinyalleri Windows altında oluşturulmaz.Bunlar, ANSI uyumluluk için eklenmiştir.Bu nedenle bu sinyalleri için sinyal işleyiciler ayarlayabilirsiniz signal, çağırarak bu sinyalleri de açıkça oluşturmak ve yükseltmek.

Üretilen işlemlerinde yapılan çağrılar tarafından oluşturulan değil sinyal ayarları korunur _exec veya _spawn işlevleri.Varsayılan olarak yeni bir işlem için sinyal ayarları sıfırlanır.

Gereksinimler

Yordamı

Gerekli başlık

signal

<signal.h>

Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.

Örnek

Aşağıdaki örnek kullanımını gösterir signal için bazı özel davranış eklemeyi SIGABRT sinyal.Abort davranış hakkında ek bilgi için bkz: _set_abort_behavior.

// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Application aborting...\n");
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGABRT, SignalHandler);
    
    abort();
}
  
  
  

.NET Framework Eşdeğeri

Yoktur. Standart c işlevi çağırmak için kullanın PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

İşlem ve ortam denetimi

abort

_exec, _wexec işlevleri

exit, _exit

_fpreset

_spawn, _wspawn işlevleri