---
name: "ipc"
section: "2"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ipc"
---

# ipc(2)

System V IPC system calls

## NAME

ipc - System V IPC system calls

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <linux/ipc.h>        /* Definition of needed constants */
#include <sys/syscall.h>      /* Definition of SYS_* constants */
#include <unistd.h>
```

**int syscall(SYS\_ipc, unsigned int** *call***, int** *first***,**             **unsigned long** *second***, unsigned long** *third***, void \****ptr***,**             **long** *fifth***);**

*Note*: glibc provides no wrapper for **ipc**(), necessitating the use of [**syscall**(2)](/syscall/2.md).

## DESCRIPTION

**ipc**() is a common kernel entry point for the System V IPC calls for messages, semaphores, and shared memory. *call* determines which IPC function to invoke; the other arguments are passed through to the appropriate call.

User-space programs should call the appropriate functions by their usual names. Only standard library implementors and kernel hackers need to know about **ipc**().

## VERSIONS

On some architectures —for example x86-64 and ARM— there is no **ipc**() system call; instead, [**msgctl**(2)](/msgctl/2.md), [**semctl**(2)](/semctl/2.md), [**shmctl**(2)](/shmctl/2.md), and so on really are implemented as separate system calls.

## STANDARDS

Linux.

## SEE ALSO

[**msgctl**(2)](/msgctl/2.md), [**msgget**(2)](/msgget/2.md), [**msgrcv**(2)](/msgrcv/2.md), [**msgsnd**(2)](/msgsnd/2.md), [**semctl**(2)](/semctl/2.md), [**semget**(2)](/semget/2.md), [**semop**(2)](/semop/2.md), [**semtimedop**(2)](/semtimedop/2.md), [**shmat**(2)](/shmat/2.md), [**shmctl**(2)](/shmctl/2.md), [**shmdt**(2)](/shmdt/2.md), [**shmget**(2)](/shmget/2.md), [**sysvipc**(7)](/sysvipc/7.md)
