Shanewas.PosixIpc 1.0.1

dotnet add package Shanewas.PosixIpc --version 1.0.1
                    
NuGet\Install-Package Shanewas.PosixIpc -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Shanewas.PosixIpc" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Shanewas.PosixIpc" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="Shanewas.PosixIpc" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Shanewas.PosixIpc --version 1.0.1
                    
#r "nuget: Shanewas.PosixIpc, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Shanewas.PosixIpc@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Shanewas.PosixIpc&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=Shanewas.PosixIpc&version=1.0.1
                    
Install as a Cake Tool

Shanewas.PosixIpc

A lightweight .NET library for System V shared memory and semaphores on Linux (x64, glibc).

  • Runtime: Linux only (throws on non-Linux).
  • No native payloads; P/Invoke to libc.so.6.
  • Designed for same-host, low-latency IPC between processes.
## Install
dotnet add package Shanewas.PosixIpc

Quick start

using Shanewas.PosixIpc;

const int shmKey = 0x5A5A1234;
const int semKey = 0x5A5A1235;

using var shm = new PosixIpcHelper(shmKey, 4096);
int sem = PosixIpcHelper.CreateSemaphore(semKey);

// writer
PosixIpcHelper.SemaphoreWait(sem);
shm.Write("hello");
PosixIpcHelper.SemaphoreSignal(sem);

// reader
PosixIpcHelper.SemaphoreWait(sem);
string s = shm.ReadString();
PosixIpcHelper.SemaphoreSignal(sem);

// cleanup when you own the semaphore
PosixIpcHelper.DestroySemaphore(sem);

API

  • new PosixIpcHelper(int key, int size) — create or open a shared memory segment.
  • static PosixIpcHelper AttachExisting(int key) — attach to an existing segment.
  • void Write(byte[] data) / void Write(string s) — write with a 4-byte length header.
  • byte[] Read() / string ReadString() — read last written payload.
  • static int CreateSemaphore(int key) — create/open SysV semaphore (1 slot, 0600).
  • static void SemaphoreWait(int semid) — blocking wait with EINTR retry.
  • static void SemaphoreSignal(int semid) — signal.
  • static void DestroySemaphore(int semid) — IPC_RMID with tolerant errors.
  • void Dispose() — detaches and removes SHM if owned.

Requirements and limits

  • glibc only (libc.so.6). Alpine/musl unsupported.

  • Containers: cross-pod not possible; cross-container requires shared IPC namespace or --ipc=host.

  • Kernel tunables may be required:

    • kernel.shmmax, kernel.shmall for segment/total size
    • kernel.sem for semaphore limits

Notes

  • Concurrency: Write/Read require external semaphore discipline.
  • AttachExisting uses a brittle shmctl(..., IPC_STAT, ...) probe (x86_64).
  • Timeouts: no semtimedop yet.

Versioning

Semantic Versioning — breaking changes bump major.

License

MIT © 2025 Shanewas

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 243 11/5/2025