---
name: "bsd_signal"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/bsd_signal"
---

# bsd\_signal(3)

simplified signal facilities

## NAME

**bsd\_signal** – simplified signal facilities

## SYNOPSIS

**#include \<signal.h\>**

*void* *\**\

**bsd\_signal**(*int sig*, *void \*funcintint*);

or in an equivalent but easier to read typedef'd version:

*typedef* *void \*sig\_t int*;\

*sig\_t*\

**bsd\_signal**(*int sig*, *sig\_t func*);

## DESCRIPTION

The **bsd\_signal**() function provides a partially compatible interface for programs written to historical system interfaces (see USAGE below).

The function call **bsd\_signal**(*sig*, *func*) has the effect as if implemented as:

```
void (*bsd_signal(int sig, void (*func)(int)))(int)
{
    struct sigaction act, oact;
    act.sa_handler = func;
    act.sa_flags = SA_RESTART;
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask, sig);
    if (sigaction(sig, &act, &oact) == -1)
	return(SIG_ERR);
    return(oact.sa_handler);
}
```

The handler function should be declared:

**void func**(*int sig*)

where *sig* is the signal number. The behavior is undefined if **func**() is a function that takes more than one argument, or an argument of a different type.

## RETURN VALUES

Upon successful completion, **bsd\_signal**() returns the previous action for *sig*. Otherwise, SIG\_ERR is returned and *errno* is set to indicate the error.

## ERRORS

Refer to [sigaction(2)](/sigaction/2.md).

## USAGE

This function is a direct replacement for the BSD [signal(3)](/signal/3.md) function for simple applications that are installing a single-argument signal handler function. If a BSD signal handler function is being installed that expects more than one argument, the application has to be modified to use [sigaction(2)](/sigaction/2.md). The **bsd\_signal**() function differs from [signal(3)](/signal/3.md) in that the SA\_RESTART flag is set and the SA\_RESETHAND will be clear when **bsd\_signal**() is used. The state of these flags is not specified for [signal(3)](/signal/3.md).

## SEE ALSO

[sigaction(2)](/sigaction/2.md), [sigaddset(3)](/sigaddset/3.md), [sigemptyset(3)](/sigemptyset/3.md), [signal(3)](/signal/3.md)

## STANDARDS

The **bsd\_signal**() function conforms to IEEE Std 1003.1-2001 (“POSIX.1”).
