{"id":7550,"date":"2022-02-25T10:12:16","date_gmt":"2022-02-25T10:12:16","guid":{"rendered":"https:\/\/digitalgateamg.com\/?p=7550"},"modified":"2022-12-08T13:48:45","modified_gmt":"2022-12-08T13:48:45","slug":"linux-system-programming","status":"publish","type":"post","link":"https:\/\/digitalgateamg.com\/de\/blog\/2022\/02\/25\/linux-system-programming\/","title":{"rendered":"Linux-Systemprogrammierung"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7550\" class=\"elementor elementor-7550\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9c1dded elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9c1dded\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7718ae6\" data-id=\"7718ae6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-8f5ac6c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8f5ac6c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-d58c784\" data-id=\"d58c784\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e9031f5 elementor-widget elementor-widget-text-editor\" data-id=\"e9031f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: var( --e-global-color-secondary ); background-color: var(--nv-site-bg); font-size: var(--bodyFontSize); font-weight: var(--bodyFontWeight); letter-spacing: var(--bodyLetterSpacing); text-transform: var(--bodyTextTransform);\">This article focuses on<\/span><span style=\"color: var( --e-global-color-secondary ); background-color: var(--nv-site-bg); font-size: var(--bodyFontSize); font-weight: var(--bodyFontWeight); letter-spacing: var(--bodyLetterSpacing); text-transform: var(--bodyTextTransform);\">\u00a0<\/span><a style=\"background-color: var(--nv-site-bg); font-size: var(--bodyFontSize); font-weight: var(--bodyFontWeight); letter-spacing: var(--bodyLetterSpacing); text-transform: var(--bodyTextTransform);\" href=\"https:\/\/www.linux.org\/\">Linux<\/a><span style=\"color: var( --e-global-color-secondary ); background-color: var(--nv-site-bg); font-size: var(--bodyFontSize); font-weight: var(--bodyFontWeight); letter-spacing: var(--bodyLetterSpacing); text-transform: var(--bodyTextTransform);\">\u00a0<\/span><span style=\"color: var( --e-global-color-secondary ); background-color: var(--nv-site-bg); font-size: var(--bodyFontSize); font-weight: var(--bodyFontWeight); letter-spacing: var(--bodyLetterSpacing); text-transform: var(--bodyTextTransform);\">system calls and other low-level operations, such as the C library&#8217;s functions.\u00a0<\/span>System programming is the process of creating system software, which is low-level code that interacts directly with the kernel and core system libraries.\u00a0<\/p><p>While files are the most basic abstraction in a Unix system, processes are the next most basic.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-d3db591\" data-id=\"d3db591\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-afcd538 elementor-widget elementor-widget-image\" data-id=\"afcd538\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/05\/Linux-Logo-300x300.png\" class=\"attachment-medium size-medium wp-image-8630\" alt=\"\" srcset=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/05\/Linux-Logo-300x300.png 300w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/05\/Linux-Logo-1024x1024.png 1024w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/05\/Linux-Logo-150x150.png 150w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/05\/Linux-Logo-768x768.png 768w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-21f4085 elementor-widget elementor-widget-text-editor\" data-id=\"21f4085\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Processes are active, alive, and running applications that are executing object code. Processes, however, are made up of more than simply object code. They also include data, resources, state, and a virtualized computer.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a46e8b6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"a46e8b6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cb42e1a\" data-id=\"cb42e1a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-461f6e3 elementor-widget elementor-widget-heading\" data-id=\"461f6e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Interprocess Communication<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-908c39f elementor-widget elementor-widget-text-editor\" data-id=\"908c39f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>One fundamental function of an operating system is to allow processes to share information and notify each other of events. To coordinate their actions, processes interact with each other and with the kernel.<\/p>\n<p>A process can have one or more execution threads, which are sequences of executable instructions: a single-threaded process has only one thread, whereas a multi-threaded process has several threads. Although some current languages advocate a more disciplined approach, such as the usage of thread-safe channels, threads within a process can communicate directly through shared memory.<\/p>\n<p>There are numerous ways to launch processes that then communicate with each other and exchange various types of data. However, the underlying mechanism is the system called function called a fork. It spawns another child process that is an identical clone of the calling process till the point where the fork was called. After that, the forked processes can communicate data, events, statuses, etc. via various inter-process communication mechanisms that will be detailed in the following.<\/p>\n<p>IPC mechanisms supported by Linux include:<\/p>\n<ul>\n<li>Pipes (named and unnamed)<\/li>\n<li>Message queues<\/li>\n<li>&nbsp;Shared files<\/li>\n<li>Shared memory semaphores<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-25c0b63 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"25c0b63\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b082867\" data-id=\"b082867\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5392f98 elementor-widget elementor-widget-spacer\" data-id=\"5392f98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0658344 elementor-widget elementor-widget-heading\" data-id=\"0658344\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">cPipes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d1f0d6 elementor-widget elementor-widget-image\" data-id=\"5d1f0d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"3742\" height=\"2432\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Pipes.png\" class=\"attachment-full size-full wp-image-7578\" alt=\"pipes\" srcset=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Pipes.png 3742w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Pipes-1536x998.png 1536w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Pipes-2048x1331.png 2048w\" sizes=\"(max-width: 3742px) 100vw, 3742px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b5113c4 elementor-widget elementor-widget-text-editor\" data-id=\"b5113c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h6>All of the common Linux shells support redirection. For example:<br \/>$ ls | pr | lpr<\/h6><p>Pipes the output from the ls command listing the directory&#8217;s files into the standard input of<br \/>the pr command which paginates them. Finally, the standard output from the pr command is piped into the standard input of the lpr command which prints the results on the default printer.<\/p><p>A pipe in Linux is made up of two file data structures that point to the same temporary VFS inode, which points to a physical page in memory. Each file data structure contains pointers to different file operation routine vectors; one for writing to the pipe, the other for reading from the pipe.<\/p><p>The general system calls read and write to regular files. Bytes are copied into the shared data page as the writing process writes to the pipe, and bytes are copied from the shared data page as the reading process reads from the pipe. Linux needs to synchronize pipe access. It uses locks, wait-for queues, and signals to ensure that the reader and writer of the pipe are on the same page.<\/p><h6 style=\"font-weight: 400;\">The standard writing library functions are used by the writer to write to the pipe.<\/h6><p>All of these pass file descriptors, which are indices into the process&#8217;s set of file data structures, each of which represents an open file or, in this example, an open pipe. The write routine pointed to by the file data structure representing this pipe is used by the Linux system call. Reading data from the pipe is a very similar process to writing it.<\/p><p>Non-blocking readings are allowed (depending on the mode in which the file or pipe was opened). An error will be returned if there is no data to be read or if the pipe is locked. This indicates that the process can continue.<\/p><p>Named pipes (often called FIFOs, short for &#8220;first in, first out&#8221;) are an interprocess communication (IPC) mechanism that provides a communication channel over a file descriptor, accessed via a special file. Regular pipes are used to &#8220;pipe&#8221; the output of one program into the input of another. They are produced in memory by a system call and are not stored on any filesystem. Named pipes function similarly to regular pipes, except they are accessible through a file known as a FIFO special file. This file can be accessed and communicated with by unrelated processes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-22c584e elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"22c584e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bce17f6\" data-id=\"bce17f6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2738cc7 elementor-widget elementor-widget-spacer\" data-id=\"2738cc7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9fa7000 elementor-widget elementor-widget-heading\" data-id=\"9fa7000\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Message Queues<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f27630d elementor-widget elementor-widget-text-editor\" data-id=\"f27630d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Message queues allow one or more processes to send messages to be read by one or more other processes. The msgque vector in Linux contains a list of message queues, each of which corresponds to a msqid ds data structure that completely specifies the message queue. A new msqid ds data structure is allocated from system memory and added to the vector when message queues are formed.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-144c925 elementor-widget elementor-widget-image\" data-id=\"144c925\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"3229\" height=\"2000\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Message.png\" class=\"attachment-full size-full wp-image-7577\" alt=\"message queues\" srcset=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Message.png 3229w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Message-1536x951.png 1536w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/02\/Message-2048x1269.png 2048w\" sizes=\"(max-width: 3229px) 100vw, 3229px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-351a7c2 elementor-widget elementor-widget-text-editor\" data-id=\"351a7c2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>An IPC perm data structure and pointers to the messages entered onto this queue are included in each msqid_ds data structure. Linux also keeps track of queue modification times, such as the last time this queue was updated, and so on. The msqid ds also has two wait queues: one for message queue writers and another for message queue readers.<\/p><p>When a process tries to write a message to the write queue, the effective user and group identifiers are compared to the mode in the IPC perm data structure of this queue. If the process can write to the queue, the message can be transferred from the process&#8217;s address space into a msg data structure and placed at the end of the queue. Each message has an application-specific type that has been agreed upon by the cooperating processes. However, because Linux limits the quantity and length of messages that can be written, there may not be enough room for the message.<\/p><p>The process will be added to the write wait queue for this message queue. The scheduler will be asked to choose a new process to run. When one or more messages from this message queue are read, it will be woken up.<br \/>Reading from the queue is a similar process.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5f5892f elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"5f5892f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ac20dc7\" data-id=\"ac20dc7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b793a46 elementor-widget elementor-widget-spacer\" data-id=\"b793a46\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f53df5c elementor-widget elementor-widget-heading\" data-id=\"f53df5c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Shared Files<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b009128 elementor-widget elementor-widget-text-editor\" data-id=\"b009128\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Shared files may be the most basic IPC mechanism. Consider the relatively simple case in which one process (producer) creates and writes to a file. Another process (consumer) reads from the same file.<\/p><p>One clear challenge of employing this IPC mechanism is the possibility of a race condition. Both the producer and the consumer may have access to the file at the same time, leaving the outcome uncertain. To avoid a race condition, the file must be locked in such a way that a write operation does not clash with any other operation, whether it is a read or a write. The standard system library&#8217;s locking API can be summarized as follows:<\/p><p>\u25cf <b>Before writing to a file,<\/b> a producer should obtain an exclusive lock on it. Only one process can hold an exclusive lock at a time, preventing a race condition because no other process can access the file until the lock is released.<br \/>\u25cf\u00a0<b>Before reading from a file,<\/b> a consumer should obtain at least a shared lock on it. A shared lock can be held by multiple readers at the same time, but no writer can access a file if even a single reader has a shared lock.<\/p><p>It is more efficient to use a shared lock. There is no reason to restrict other processes from reading a file and not modifying its contents if one process is doing so. Writing, on the other hand, plainly necessitates exclusive access to a file.<\/p><p>A utility function called <strong>fcntl<\/strong> is included in the standard I\/O library. It can be used to inspect and manipulate both exclusive and shared locks on a file. The function works with a file descriptor, which is a non-negative integer number that identifies a file within a process.<\/p><h6>The following example uses the <strong>fcntl<\/strong> function to expose API details:<\/h6>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-14e874a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"14e874a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f28a442\" data-id=\"f28a442\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-062e2dc elementor-widget elementor-widget-code-highlight\" data-id=\"062e2dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <fcntl.h>\r\n#include <unistd.h>\r\n#include <string.h>\r\n\r\n#define FileName \"data.dat\"\r\n#define DataString \"Hello!\\nHow are you?\\n\"\r\n\r\nvoid report_and_exit(const char* msg) {\r\n  perror(msg);\r\n  exit(-1); \/* FAILURE *\/\r\n}\r\n\r\nint main() {\r\n  struct flock secured;\r\n  secured.l_type = F_WRLCK;    \/* read\/write *\/\r\n  secured.l_whence = SEEK_SET; \/* base for seek offsets *\/\r\n  secured.l_start = 0;         \/* first byte in file *\/\r\n  secured.l_len = 0;           \/* 0 here means 'until EOF' *\/\r\n  secured.l_pid = getpid();    \/* process id *\/\r\n\r\n  int fd; \/* fd to identify a file within a process *\/\r\n  if ((fd = open(FileName, O_RDWR | O_CREAT, 0666)) < 0)  \/* -1 signals an error *\/\r\n    report_and_exit(\"open failed...\");\r\n\r\n  if (fcntl(fd, F_SETLK, &secured) < 0) \/* F_SETLK doesn't block, F_SETLKW does *\/\r\n    report_and_exit(\"fcntl failed to get lock...\");\r\n  else {\r\n    write(fd, DataString, strlen(DataString)); \/* populate data file *\/\r\n    fprintf(stderr, \"Process %d has written to data file...\\n\", secured.l_pid);\r\n  }\r\n\r\n  \/* Now release the lock explicitly. *\/\r\n  secured.l_type = F_UNLCK;\r\n  if (fcntl(fd, F_SETLK, &secured) < 0)\r\n    report_and_exit(\"unlocking failed\");\r\n\r\n  close(fd); \/* close the file: would unlock if needed *\/\r\n  return 0;  \/* terminating the process would unlock as well *\/\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fa9a4a4 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fa9a4a4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b393ee6\" data-id=\"b393ee6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d70a613 elementor-widget elementor-widget-spacer\" data-id=\"d70a613\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-603b544 elementor-widget elementor-widget-heading\" data-id=\"603b544\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Shared Memory Semaphores<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f4134f elementor-widget elementor-widget-text-editor\" data-id=\"1f4134f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A <strong>semaphore <\/strong>is a synchronization mechanism. It allows a contending process or thread to alter, monitor queries, and control shared system resources. It is also a solution to the race condition in a multiprocessing system. A race condition occurs when multiple processes try to access shared resources. If the multi-threaded feature is needed by the application, then it comes with a set of issues such as race conditions, deadlocks, and incorrect behavior of threads.<br \/>A semaphore is based on an internal count that offers two basic operations:<\/p><ol><li><b>Wait:<\/b> Tests the value of the semaphore count, and waits if the value is less than or equal to 0. Otherwise, decrements the semaphore count.<\/li><li><b>Post:<\/b> Increments the semaphore count. If any process is blocked, one of those processes is awoken.<\/li><\/ol><p>Boost. Interprocess offers the following semaphore types:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-977b9d5 elementor-widget elementor-widget-code-highlight\" data-id=\"977b9d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include <boost\/interprocess\/sync\/interprocess_semaphore.hpp><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2edb34a elementor-widget elementor-widget-text-editor\" data-id=\"2edb34a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>\u25cf\u00a0interprocess_semaphore:<\/b> An anonymous semaphore that can be placed in shared memory or memory-mapped files.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3cd5e97 elementor-widget elementor-widget-code-highlight\" data-id=\"3cd5e97\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include <boost\/interprocess\/sync\/named_semaphore.hpp><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d484298 elementor-widget elementor-widget-text-editor\" data-id=\"d484298\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u25cf<b>\u00a0named_semaphore: <\/b>A named semaphore.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8fcc5f1 elementor-widget elementor-widget-text-editor\" data-id=\"8fcc5f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>We&#8217;ll use<strong> shared memory<\/strong> to construct an integer array. It will be used to move data from one process to another. <br \/>The first process will write some integers to the array, and if the array is full, the process will block.<br \/>The second process will copy the transmitted data to its own buffer, blocking if there is no new data in the buffer.<\/p><p>This is the shared integer array (doc_anonymous_semaphore_shared_data.hpp):<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6fde699 elementor-widget elementor-widget-code-highlight\" data-id=\"6fde699\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include <boost\/interprocess\/sync\/interprocess_semaphore.hpp>\r\nstruct shmem_buff\r\n{\r\n   enum { nr = 10 };\r\n   shmem_buff ()\r\n      : mutex(1), nempty(nr), nstored(0)\r\n   {}\r\n   \/\/To protect and synchronize access, semaphores are used.\r\n   boost::interprocess::interprocess_semaphore\r\n      mutex, nempty, nstored;\r\n   \/\/Things to be filled with\r\n   int stg[nr];\r\n};\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bfc00ab elementor-widget elementor-widget-text-editor\" data-id=\"bfc00ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h6 style=\"font-weight: 400\">This is the process main process. Creates the shared memory, places there the integer array, and starts integers one by one, blocking if the array is full:<\/h6>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e235955 elementor-widget elementor-widget-code-highlight\" data-id=\"e235955\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include <boost\/interprocess\/shared_memory_object.hpp>\r\n#include <boost\/interprocess\/mapped_region.hpp>\r\n#include <iostream>\r\n#include \"doc_anonymous_semaphore_shared_data.hpp\"\r\n\r\nusing namespace boost::interprocess;\r\n\r\nint main ()\r\n{\r\n   \/\/ On construction and destruction, remove shared memory\r\n   struct erase_sm\r\n   {\r\n      erase_sm() { shared_memory_object::remove(\"MySharedMemory\"); }\r\n      ~erase_sm(){ shared_memory_object::remove(\"MySharedMemory\"); }\r\n   } remover;\r\n\r\n   \/\/Make a shared memory object.\r\n   shared_memory_object obj\r\n      (create_only                  \/\/only create\r\n      ,\"MySharedMemory\"              \/\/name\r\n      ,read_write  \/\/read-write mode\r\n      );\r\n\r\n   \/\/Set size\r\n   obj.truncate(sizeof(shared_memory_buffer));\r\n\r\n   \/\/ In this process, map out the entire shared memory.\r\n   mapped_region region\r\n      (obj                       \/\/What to map\r\n      ,read_write \/\/ Read-write mapped\r\n      );\r\n\r\n   \/\/ Get the mapped region's address\r\n   void * addr = region.get_address();\r\n\r\n   \/\/Build the shared structure in memory\r\n   shmem_buff * info = new (addr) shared_memory_buffer;\r\n\r\n   const int nr_msg = 100;\r\n\r\n   \/\/Insert data in the array\r\n   for(int i = 0; i < nr_msg; ++i){\r\n      info->nempty.wait();\r\n      info->mutex.wait();\r\n      info->stg[i % shared_memory_buffer::nr] = i;\r\n      info->mutex.post();\r\n      info->nstored.post();\r\n   }\r\n\r\n   return 0;\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c48325b elementor-widget elementor-widget-text-editor\" data-id=\"c48325b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The second process opens the shared memory and copies the received integers to it&#8217;s own buffer:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f786fb elementor-widget elementor-widget-code-highlight\" data-id=\"6f786fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-c line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-c\">\n\t\t\t\t\t<xmp>#include <boost\/interprocess\/shared_memory_object.hpp>\r\n#include <boost\/interprocess\/mapped_region.hpp>\r\n#include <iostream>\r\n#include \"doc_anonymous_semaphore_shared_data.hpp\"\r\n\r\nusing namespace boost::interprocess;\r\n\r\nint main ()\r\n{\r\n   \/\/On destruction, shared memory has to be removed\r\n   struct erase_sm\r\n   {\r\n      ~erase_sm(){ shared_memory_object::remove(\"MySharedMemory\"); }\r\n   } remover;\r\n\r\n   \/\/Create a shared memory object.\r\n   shared_memory_object obj\r\n      (open_only                    \/\/just create\r\n      ,\"MySharedMemory\"              \/\/the name\r\n      ,read_write  \/\/read-write mode\r\n      );\r\n\r\n   \/\/ In this process, map out the entire shared memory.\r\n   mapped_region region\r\n      (obj                       \/\/What to map\r\n      ,read_write \/\/Map it as read-write\r\n      );\r\n\r\n   \/\/ Obtain the mapped region's address\r\n   void * addr       = region.get_address();\r\n\r\n   \/\/Get the shared structure\r\n   shmem_buff * info = static_cast<shared_memory_buffer*>(addr);\r\n\r\n   const int nr_msg = 100;\r\n\r\n   int extracted_info [nr_msg];\r\n\r\n   \/\/Extract the information\r\n   int i;\r\n   for( i = 0; i < nr_msg; ++i){\r\n      info->nstored.wait();\r\n      info->mutex.wait();\r\n      extracted_info[i] = info->stg[i % shared_memory_buffer::nr];\r\n      info->mutex.post();\r\n      info->nempty.post();\r\n   }\r\n   return 0;\r\n}\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-917bdc1 elementor-widget elementor-widget-text-editor\" data-id=\"917bdc1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>The same interprocess communication can be achieved with condition variables and mutexes.\u00a0 For several synchronization patterns, a semaphore is more efficient than a mutex\/condition combination.<\/p><p>Linux systems provide two separate APIs for <strong>shared memory<\/strong>: the legacy System V API and the more recent POSIX one. These APIs should never be mixed in a single application, however. A downside of the POSIX approach is that features are still in development and dependent upon the installed kernel version, which impacts code portability<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-abd7339 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"abd7339\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-narrow\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5a76b28\" data-id=\"5a76b28\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-49ac357 elementor-widget elementor-widget-spacer\" data-id=\"49ac357\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-686d4ef elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"686d4ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e028518 elementor-widget elementor-widget-heading\" data-id=\"e028518\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">See other articles:<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e65670d elementor-grid-3 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts\" data-id=\"e65670d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:20,&quot;sizes&quot;:[]},&quot;pagination_type&quot;:&quot;numbers&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:30,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;3&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14657 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-accelerator-pedal-simulator tag-acoustic-tuning tag-automotive-industry tag-digitalgate tag-embedded-system-development tag-hardware-development tag-software-development\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/09\/10\/accelerator-pedal-simulator-for-acoustics-tuning\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"620\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/09\/Accelerator-Pedal-Simulator-for-Acoustic-Tuning-1-930x620.png\" class=\"attachment-neve-blog size-neve-blog wp-image-14672\" alt=\"\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/09\/10\/accelerator-pedal-simulator-for-acoustics-tuning\/\" >\n\t\t\t\tAccelerator Pedal Simulator for Acoustics Tuning\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tSeptember 10, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Have you ever wondered how the perfect roar of an engine, or the smooth hum of a luxury car is crafted? It all comes<\/p>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-post__read-more-wrapper\">\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/09\/10\/accelerator-pedal-simulator-for-acoustics-tuning\/\" aria-label=\"Mehr \u00fcber Accelerator Pedal Simulator for Acoustics Tuning\" tabindex=\"-1\" >\n\t\t\tRead More \u00bb\t\t<\/a>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14620 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-condition-monitoring tag-data-acquisition-system tag-embedded-system-development tag-hardware-development tag-predictive-maintenance tag-software-development\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/08\/28\/industrial-data-acquisition-system\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"620\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/08\/IEPE_DAS-930x620.png\" class=\"attachment-neve-blog size-neve-blog wp-image-14649\" alt=\"Data Acquistion PCB board with DigitalGate logo on a gray background\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/08\/28\/industrial-data-acquisition-system\/\" >\n\t\t\t\tIndustrial Data Acquisition System\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tAugust 28, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>We&#8217;re excited to unveil one of our flagship products: an efficient and secure Data Acquisition System (DAS). Our team has designed this solution to<\/p>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-post__read-more-wrapper\">\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/08\/28\/industrial-data-acquisition-system\/\" aria-label=\"Mehr \u00fcber Industrial Data Acquisition System\" tabindex=\"-1\" >\n\t\t\tRead More \u00bb\t\t<\/a>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14267 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/03\/15\/optimizing-our-custom-motor-controller-for-motion-control\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"928\" height=\"620\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/03\/background-blog-BMS-928x620.jpeg\" class=\"attachment-neve-blog size-neve-blog wp-image-14268\" alt=\"\" srcset=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/03\/background-blog-BMS-928x620.jpeg 928w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/03\/background-blog-BMS-18x12.jpeg 18w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/03\/15\/optimizing-our-custom-motor-controller-for-motion-control\/\" >\n\t\t\t\tOptimizing our Custom Motor Controller for Motion Control\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tM\u00e4rz 15, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Using our carefully designed board, we demonstrate the impressive power and flexibility of integrating modern technologies into motor controllers. In the realm of small<\/p>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-post__read-more-wrapper\">\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/03\/15\/optimizing-our-custom-motor-controller-for-motion-control\/\" aria-label=\"Mehr \u00fcber Optimizing our Custom Motor Controller for Motion Control\" tabindex=\"-1\" >\n\t\t\tRead More \u00bb\t\t<\/a>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14259 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/03\/01\/what-it-means-to-make-an-efficient-battery-management-system\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"928\" height=\"620\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/03\/Background-1-928x620.jpeg\" class=\"attachment-neve-blog size-neve-blog wp-image-14255\" alt=\"\" srcset=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/03\/Background-1-928x620.jpeg 928w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/03\/Background-1-18x12.jpeg 18w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/03\/01\/what-it-means-to-make-an-efficient-battery-management-system\/\" >\n\t\t\t\tWhat it means to make an efficient Battery Management System?\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tM\u00e4rz 1, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Digital Gate is excited to introduce you to one of our flagship products: an efficient and secure Battery Management System (BMS), meticulously designed and<\/p>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-post__read-more-wrapper\">\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/03\/01\/what-it-means-to-make-an-efficient-battery-management-system\/\" aria-label=\"Mehr \u00fcber What it means to make an efficient Battery Management System?\" tabindex=\"-1\" >\n\t\t\tRead More \u00bb\t\t<\/a>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14236 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/02\/21\/embedded-world-2024\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"928\" height=\"620\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/02\/EW24-Thumbnail-1-928x620.png\" class=\"attachment-neve-blog size-neve-blog wp-image-14239\" alt=\"\" srcset=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/02\/EW24-Thumbnail-1-928x620.png 928w, https:\/\/digitalgateamg.com\/wp-content\/uploads\/2024\/02\/EW24-Thumbnail-1-18x12.png 18w\" sizes=\"(max-width: 928px) 100vw, 928px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/02\/21\/embedded-world-2024\/\" >\n\t\t\t\tEmbedded World 2024\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tFebruar 21, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>DigitalGate is excited to announce its forthcoming participation at Embedded World 2024 taking place in Nuremberg from the 9th to the 11th of April.<\/p>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-post__read-more-wrapper\">\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2024\/02\/21\/embedded-world-2024\/\" aria-label=\"Mehr \u00fcber Embedded World 2024\" tabindex=\"-1\" >\n\t\t\tRead More \u00bb\t\t<\/a>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-13342 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2023\/08\/08\/capacitance-preservation-strategies-for-dc-bias-in-mlccs\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"620\" src=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2023\/08\/blog-info-new-e1691567543143-930x620.png\" class=\"attachment-neve-blog size-neve-blog wp-image-13420\" alt=\"\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2023\/08\/08\/capacitance-preservation-strategies-for-dc-bias-in-mlccs\/\" >\n\t\t\t\tCapacitance Preservation: Strategies for DC Bias in MLCCs\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tAugust 8, 2023\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Is the capacitance of the capacitor always same? Multilayer ceramic capacitors (MLCCs) offer several advantages that make them a popular choice for various electronic<\/p>\n\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-post__read-more-wrapper\">\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2023\/08\/08\/capacitance-preservation-strategies-for-dc-bias-in-mlccs\/\" aria-label=\"Mehr \u00fcber Capacitance Preservation: Strategies for DC Bias in MLCCs\" tabindex=\"-1\" >\n\t\t\tRead More \u00bb\t\t<\/a>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t<div class=\"e-load-more-anchor\" data-page=\"1\" data-max-page=\"4\" data-next-page=\"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550\/page\/2\/\"><\/div>\n\t\t\t\t<nav class=\"elementor-pagination\" aria-label=\"Seitennummerierung\">\n\t\t\t<span aria-current=\"page\" class=\"page-numbers current\"><span class=\"elementor-screen-only\">Seite<\/span>1<\/span>\n<a class=\"page-numbers\" href=\"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550\/page\/2\/\"><span class=\"elementor-screen-only\">Seite<\/span>2<\/a>\n<a class=\"page-numbers\" href=\"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550\/page\/3\/\"><span class=\"elementor-screen-only\">Seite<\/span>3<\/a>\n<a class=\"page-numbers\" href=\"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550\/page\/4\/\"><span class=\"elementor-screen-only\">Seite<\/span>4<\/a>\t\t<\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>This article focuses on\u00a0Linux\u00a0system calls and other low-level operations, such as the C library&#8217;s functions.\u00a0System programming is the process of creating system software, which is low-level code that interacts directly with the kernel and core system libraries.\u00a0 While files are the most basic abstraction in a Unix system, processes are the next most basic. Processes&hellip;&nbsp;<a href=\"https:\/\/digitalgateamg.com\/de\/blog\/2023\/08\/08\/capacitance-preservation-strategies-for-dc-bias-in-mlccs\/\" class=\"\" rel=\"bookmark\">Weiterlesen &raquo;<span class=\"screen-reader-text\">Kapazit\u00e4tserhalt: Strategien f\u00fcr DC-Vorspannung in MLCCs<\/span><\/a><\/p>","protected":false},"author":12,"featured_media":10104,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"coauthors":[],"class_list":["post-7550","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Linux System Programming - DigitalGate Custom Electronics<\/title>\n<meta name=\"description\" content=\"This article focuses on Linux system calls and other low-level operations, such as the C library\u2019s functions.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/digitalgateamg.com\/de\/blog\/2022\/02\/25\/linux-system-programming\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Linux System Programming\" \/>\n<meta property=\"og:description\" content=\"This article focuses on Linux system calls and other low-level operations, such as the C library\u2019s functions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/digitalgateamg.com\/de\/blog\/2022\/02\/25\/linux-system-programming\/\" \/>\n<meta property=\"og:site_name\" content=\"DigitalGate Custom Electronics\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DigitalGateamg\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-25T10:12:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-08T13:48:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"930\" \/>\n\t<meta property=\"og:image:height\" content=\"620\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Digital Gate\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Digital Gate\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Digital Gate\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/\"},\"author\":{\"name\":\"Digital Gate\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#\\\/schema\\\/person\\\/27511cb01dbba51abd9b489e6adc2fce\"},\"headline\":\"Linux System Programming\",\"datePublished\":\"2022-02-25T10:12:16+00:00\",\"dateModified\":\"2022-12-08T13:48:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/\"},\"wordCount\":1629,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/blog-2.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/\",\"url\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/\",\"name\":\"Linux System Programming - DigitalGate Custom Electronics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/blog-2.png\",\"datePublished\":\"2022-02-25T10:12:16+00:00\",\"dateModified\":\"2022-12-08T13:48:45+00:00\",\"description\":\"This article focuses on Linux system calls and other low-level operations, such as the C library\u2019s functions.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#primaryimage\",\"url\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/blog-2.png\",\"contentUrl\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/blog-2.png\",\"width\":930,\"height\":620},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/blog\\\/2022\\\/02\\\/25\\\/linux-system-programming\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/digitalgateamg.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Linux System Programming\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#website\",\"url\":\"https:\\\/\\\/digitalgateamg.com\\\/\",\"name\":\"DigitalGate Custom Electronics\",\"description\":\"Embedded Software and Hardware Solutions\",\"publisher\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/digitalgateamg.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#organization\",\"name\":\"DigitalGate Amg S.A.\",\"url\":\"https:\\\/\\\/digitalgateamg.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/logo-firma.png\",\"contentUrl\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/uploads\\\/2021\\\/10\\\/logo-firma.png\",\"width\":370,\"height\":370,\"caption\":\"DigitalGate Amg S.A.\"},\"image\":{\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/DigitalGateamg\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sc-digitalgate-amg-srl\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/#\\\/schema\\\/person\\\/27511cb01dbba51abd9b489e6adc2fce\",\"name\":\"Digital Gate\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/litespeed\\\/avatar\\\/46f85298923a63b5939c9a06d38c2790.jpg?ver=1788949926c4177d0df5f612588c988bb8cfef7b68\",\"url\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/litespeed\\\/avatar\\\/46f85298923a63b5939c9a06d38c2790.jpg?ver=1788949926\",\"contentUrl\":\"https:\\\/\\\/digitalgateamg.com\\\/wp-content\\\/litespeed\\\/avatar\\\/46f85298923a63b5939c9a06d38c2790.jpg?ver=1788949926\",\"caption\":\"Digital Gate\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Linux System Programming - DigitalGate Custom Electronics","description":"This article focuses on Linux system calls and other low-level operations, such as the C library\u2019s functions.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/digitalgateamg.com\/de\/blog\/2022\/02\/25\/linux-system-programming\/","og_locale":"de_DE","og_type":"article","og_title":"Linux System Programming","og_description":"This article focuses on Linux system calls and other low-level operations, such as the C library\u2019s functions.","og_url":"https:\/\/digitalgateamg.com\/de\/blog\/2022\/02\/25\/linux-system-programming\/","og_site_name":"DigitalGate Custom Electronics","article_publisher":"https:\/\/www.facebook.com\/DigitalGateamg\/","article_published_time":"2022-02-25T10:12:16+00:00","article_modified_time":"2022-12-08T13:48:45+00:00","og_image":[{"width":930,"height":620,"url":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png","type":"image\/png"}],"author":"Digital Gate","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Digital Gate","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten","Written by":"Digital Gate"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#article","isPartOf":{"@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/"},"author":{"name":"Digital Gate","@id":"https:\/\/digitalgateamg.com\/#\/schema\/person\/27511cb01dbba51abd9b489e6adc2fce"},"headline":"Linux System Programming","datePublished":"2022-02-25T10:12:16+00:00","dateModified":"2022-12-08T13:48:45+00:00","mainEntityOfPage":{"@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/"},"wordCount":1629,"commentCount":0,"publisher":{"@id":"https:\/\/digitalgateamg.com\/#organization"},"image":{"@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#primaryimage"},"thumbnailUrl":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png","articleSection":["Uncategorized"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/","url":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/","name":"Linux System Programming - DigitalGate Custom Electronics","isPartOf":{"@id":"https:\/\/digitalgateamg.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#primaryimage"},"image":{"@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#primaryimage"},"thumbnailUrl":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png","datePublished":"2022-02-25T10:12:16+00:00","dateModified":"2022-12-08T13:48:45+00:00","description":"This article focuses on Linux system calls and other low-level operations, such as the C library\u2019s functions.","breadcrumb":{"@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#primaryimage","url":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png","contentUrl":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png","width":930,"height":620},{"@type":"BreadcrumbList","@id":"https:\/\/digitalgateamg.com\/blog\/2022\/02\/25\/linux-system-programming\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/digitalgateamg.com\/"},{"@type":"ListItem","position":2,"name":"Linux System Programming"}]},{"@type":"WebSite","@id":"https:\/\/digitalgateamg.com\/#website","url":"https:\/\/digitalgateamg.com\/","name":"DigitalGate Custom Electronics","description":"Embedded Software and Hardware Solutions","publisher":{"@id":"https:\/\/digitalgateamg.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/digitalgateamg.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/digitalgateamg.com\/#organization","name":"DigitalGate Amg S.A.","url":"https:\/\/digitalgateamg.com\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/digitalgateamg.com\/#\/schema\/logo\/image\/","url":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2021\/10\/logo-firma.png","contentUrl":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2021\/10\/logo-firma.png","width":370,"height":370,"caption":"DigitalGate Amg S.A."},"image":{"@id":"https:\/\/digitalgateamg.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DigitalGateamg\/","https:\/\/www.linkedin.com\/company\/sc-digitalgate-amg-srl\/"]},{"@type":"Person","@id":"https:\/\/digitalgateamg.com\/#\/schema\/person\/27511cb01dbba51abd9b489e6adc2fce","name":"Digital Gate","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/digitalgateamg.com\/wp-content\/litespeed\/avatar\/46f85298923a63b5939c9a06d38c2790.jpg?ver=1788949926c4177d0df5f612588c988bb8cfef7b68","url":"https:\/\/digitalgateamg.com\/wp-content\/litespeed\/avatar\/46f85298923a63b5939c9a06d38c2790.jpg?ver=1788949926","contentUrl":"https:\/\/digitalgateamg.com\/wp-content\/litespeed\/avatar\/46f85298923a63b5939c9a06d38c2790.jpg?ver=1788949926","caption":"Digital Gate"}}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/digitalgateamg.com\/wp-content\/uploads\/2022\/07\/blog-2.png","_links":{"self":[{"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/comments?post=7550"}],"version-history":[{"count":30,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550\/revisions"}],"predecessor-version":[{"id":13149,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/posts\/7550\/revisions\/13149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/media\/10104"}],"wp:attachment":[{"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/media?parent=7550"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/categories?post=7550"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/tags?post=7550"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/digitalgateamg.com\/de\/wp-json\/wp\/v2\/coauthors?post=7550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}