<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>GNU/Linux on BadproG</title>
    <link>https://www.badprog.com/gnu-linux/</link>
    <description>Recent content in GNU/Linux on BadproG</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 17 Jan 2019 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.badprog.com/gnu-linux/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>UNIX &amp; GNU/Linux - SSH - Communication between client and server</title>
      <link>https://www.badprog.com/unix-gnu-linux-ssh-communication-between-client-and-server/</link>
      <pubDate>Thu, 17 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-ssh-communication-between-client-and-server/</guid>
      <description>&lt;p&gt;In this tutorial we are going to see how two computers can communicate with each other through the &lt;strong&gt;SSH&lt;/strong&gt; protocol.&lt;/p&gt;
&lt;p&gt;Why do we need SSH keys and how to use them?&lt;/p&gt;
&lt;p&gt;We will use one computer as Server and another one as Client.&lt;/p&gt;
&lt;h2 id=&#34;first-of-all&#34;&gt;First of all&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 18.04.01 (LTS): &lt;a href=&#34;https://www.ubuntu.com/&#34;&gt;https://www.ubuntu.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;openssh-server: directly from Ubuntu (more details in the tutorial)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before starting we need some useful tools that we are going to install on Ubuntu:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - SSH - Generating the public and private keys with a CLI</title>
      <link>https://www.badprog.com/unix-gnu-linux-ssh-generating-the-public-and-private-keys-with-a-cli/</link>
      <pubDate>Thu, 29 Jun 2017 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-ssh-generating-the-public-and-private-keys-with-a-cli/</guid>
      <description>&lt;p&gt;Using SSH is helpful in many situations.&lt;/p&gt;
&lt;p&gt;But before using it, it&amp;rsquo;s essential to have the famous &lt;strong&gt;public and private keys&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This SSH tutorial is for Windows and Linux users but feel free to inspire yourself for another operating system.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see that.&lt;/p&gt;
&lt;h2 id=&#34;first-of-all&#34;&gt;First of all&lt;/h2&gt;
&lt;p&gt;In this SSH tutorial we are going to use a CLI (Command Line Interface).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve chosen Git Bash but of course you can use the CLI of your choice (Cygwin for example) on Windows or simply your usual terminal on Linux.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Kernel - Hello world Linux kernel compilation</title>
      <link>https://www.badprog.com/unix-gnu-linux-kernel-hello-world-linux-kernel-compilation/</link>
      <pubDate>Mon, 12 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-kernel-hello-world-linux-kernel-compilation/</guid>
      <description>&lt;p&gt;If you read this tutorial it&amp;rsquo;s because you are curious about how to compile a Linux kernel.&lt;/p&gt;
&lt;p&gt;There is plenty of reasons you might want to learn this procedure.&lt;/p&gt;
&lt;p&gt;Even if you are a beginner, you will understand each step for building your first &lt;strong&gt;Linux kernel&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;first-of-all&#34;&gt;First of all&lt;/h2&gt;
&lt;p&gt;To compile a Linux kernel, you have to have a Linux distribution installed on your computer.&lt;/p&gt;
&lt;p&gt;So if you don&amp;rsquo;t know how, I recommend to start by using a virtual machine, such as &lt;strong&gt;VirtualBox&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Gentoo - Basis for setting it up</title>
      <link>https://www.badprog.com/unix-gnu-linux-gentoo-basis-for-setting-it-up/</link>
      <pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-gentoo-basis-for-setting-it-up/</guid>
      <description>&lt;p&gt;In the Linux world, there are two types of distributions.&lt;/p&gt;
&lt;p&gt;First the monolithic ones, such as Ubuntu, where you don&amp;rsquo;t have to set anything before using it.&lt;/p&gt;
&lt;p&gt;Everything (or almost) is included to begin.&lt;/p&gt;
&lt;p&gt;Second, the specific ones, that on calls &lt;strong&gt;meta-distributions&lt;/strong&gt;, where you have to select only packages and options you want to have.&lt;/p&gt;
&lt;p&gt;Of course, the first is easier to use for a current usage but there is no optimization at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - bash - Setting a profile with the Git prompt</title>
      <link>https://www.badprog.com/unix-gnu-linux-bash-setting-a-profile-with-the-git-prompt/</link>
      <pubDate>Sun, 06 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-bash-setting-a-profile-with-the-git-prompt/</guid>
      <description>&lt;p&gt;You have downloaded and installed your Git Bash on Windows.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a good thing.&lt;/p&gt;
&lt;p&gt;But if you want to change your prompt as your favorite one, you have to create a file and add your own settings.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see this.&lt;/p&gt;
&lt;h2 id=&#34;first-of-all&#34;&gt;First of all&lt;/h2&gt;
&lt;p&gt;After &lt;a href=&#34;https://git-scm.com/download/win&#34;&gt;downloading Git bash&lt;/a&gt; and installed it, if you launch it you&amp;rsquo;ll have a classic prompt.&lt;/p&gt;
&lt;p&gt;To have something different, you have to create a new file &lt;strong&gt;.profile&lt;/strong&gt; to override the default settings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Raspberry Pi - Set up for a connection with a desktop PC</title>
      <link>https://www.badprog.com/unix-gnu-linux-raspberry-pi-set-up-for-a-connection-with-a-desktop-pc/</link>
      <pubDate>Sun, 16 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-raspberry-pi-set-up-for-a-connection-with-a-desktop-pc/</guid>
      <description>&lt;p&gt;Since its launch, the Raspberry Pi has a very huge impact in the world.&lt;/p&gt;
&lt;p&gt;You have certainly one in your hands but maybe you don&amp;rsquo;t really know how to use it.&lt;/p&gt;
&lt;p&gt;In this tutorial, we are going to see how to send commands directly from your PC without having a specific screen, keyboard and mouse connected onto the board.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s totally possible! For that the only thing to have is an Ethernet cable connected to your network.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Tips and tricks - Having more than 4 workspaces with Ubuntu 13.04</title>
      <link>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-having-more-than-4-workspaces-with-ubuntu-13-04/</link>
      <pubDate>Sun, 02 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-having-more-than-4-workspaces-with-ubuntu-13-04/</guid>
      <description>&lt;p&gt;With Ubuntu 13.04, you certainly found out that there is, by default, only one workspace.&lt;/p&gt;
&lt;p&gt;If you want more, there are solutions.&lt;/p&gt;
&lt;p&gt;First of all enable workspaces, then change (if you want) the number of workspaces.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see this in this tutorial.&lt;/p&gt;
&lt;h2 id=&#34;where-to-find-it&#34;&gt;Where to find it?&lt;/h2&gt;
&lt;p&gt;Click &lt;strong&gt;Settings &amp;gt; Appareance &amp;gt; Behavior &amp;gt; Enable workspaces&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You have now 4 workspaces.&lt;/p&gt;
&lt;p&gt;But if you want more you have to install &lt;strong&gt;ccsm&lt;/strong&gt;, the CompizConfig Settings Manager.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - LAMP - Installation</title>
      <link>https://www.badprog.com/unix-gnu-linux-lamp-installation/</link>
      <pubDate>Mon, 04 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-lamp-installation/</guid>
      <description>&lt;p&gt;For a reason or for another, you need a server. You could install Apache, why not? But you want more! You want Apache2, PHP and MySQL in a bundle. For the same price we&amp;rsquo;re going to add phpMyAdmin.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see how to install LAMP and phpMyAdmin in this Ubuntu tutorial.&lt;/p&gt;
&lt;h2 id=&#34;lamp-linux-apache-http-mysql-php&#34;&gt;LAMP: Linux, Apache HTTP, MySQL, PHP&lt;/h2&gt;
&lt;p&gt;We have to download and install LAMP with the following command line in our terminal:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Tips and tricks - Installing Google Chrome on Ubuntu</title>
      <link>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-installing-google-chrome-on-ubuntu/</link>
      <pubDate>Sat, 02 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-installing-google-chrome-on-ubuntu/</guid>
      <description>&lt;p&gt;What would we do without Google? Who knows. But this is not the question. In this tutorial we will see how to install Google Chrome on Ubuntu 12.04.&lt;/p&gt;
&lt;p&gt;It may seem easy like that, but it isn&amp;rsquo;t. And I&amp;rsquo;m a bit surprise about that. But anyway, let&amp;rsquo;s see this.&lt;/p&gt;
&lt;h2 id=&#34;downloading&#34;&gt;Downloading&lt;/h2&gt;
&lt;p&gt;Open your favorite terminal and if you have a &lt;strong&gt;64-bit&lt;/strong&gt; OS, type this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If your system is a &lt;strong&gt;32-bit&lt;/strong&gt; (or if you don&amp;rsquo;t know) you have to type this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - awk - Count number of words in a file and check a name in another</title>
      <link>https://www.badprog.com/unix-gnu-linux-awk-count-number-of-words-in-a-file-and-check-a-name-in-another/</link>
      <pubDate>Sat, 27 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-awk-count-number-of-words-in-a-file-and-check-a-name-in-another/</guid>
      <description>&lt;p&gt;In this &lt;strong&gt;awk&lt;/strong&gt; tutorial we&amp;rsquo;re going to see how to count words in a file and display it.&lt;/p&gt;
&lt;p&gt;And in a second time, we will see how to check if a name, inside a file, is present in the first file.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s check it.&lt;/p&gt;
&lt;h2 id=&#34;explanation&#34;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;In the &lt;strong&gt;BEGIN&lt;/strong&gt; pattern we specify the separator with the &lt;strong&gt;FS&lt;/strong&gt; builtin variable. In our case, it will be the default one, the space character.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - awk - Read a file and computing the average of students&#39; marks</title>
      <link>https://www.badprog.com/unix-gnu-linux-awk-read-a-file-and-computing-the-average-of-students-marks/</link>
      <pubDate>Sat, 27 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-awk-read-a-file-and-computing-the-average-of-students-marks/</guid>
      <description>&lt;p&gt;The awk user command is made to read a file and check each column, one by one.&lt;/p&gt;
&lt;p&gt;We need to compute the average of students&amp;rsquo; marks and to display the total of their average.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s go.&lt;/p&gt;
&lt;h2 id=&#34;explanation&#34;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;In the BEGIN pattern we specify the separator with the &lt;strong&gt;FS&lt;/strong&gt; builtin variable. In our case, it will be the default one: &amp;quot; &amp;quot; (the &lt;strong&gt;space&lt;/strong&gt; character).&lt;/p&gt;
&lt;p&gt;In the dev pattern, we are going to retrieve marks of each student and make an average of them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - awk - Using getline to retrieve data</title>
      <link>https://www.badprog.com/unix-gnu-linux-awk-using-getline-to-retrieve-data/</link>
      <pubDate>Sat, 27 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-awk-using-getline-to-retrieve-data/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve already played with awk, passing it a file, but we&amp;rsquo;re going now to see how to retrieve data from the user with the command line.&lt;/p&gt;
&lt;p&gt;We would like to know what&amp;rsquo;s the name of the user.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s ask him.&lt;/p&gt;
&lt;h2 id=&#34;explanation&#34;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;-f&lt;/strong&gt; flag is normally to tell awk that we&amp;rsquo;re going to pass a file as argument. But if we don&amp;rsquo;t, the shell will wait for a file.&lt;br&gt;
Instead of a file, we will give to awk a string that we&amp;rsquo;ll retrieve thanks to the &lt;strong&gt;getline&lt;/strong&gt; function.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - awk - Using matching expressions and operators to find a pattern</title>
      <link>https://www.badprog.com/unix-gnu-linux-awk-using-matching-expressions-and-operators-to-find-a-pattern/</link>
      <pubDate>Sat, 27 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-awk-using-matching-expressions-and-operators-to-find-a-pattern/</guid>
      <description>&lt;p&gt;The user command awk enables to check if an expression could be found in a file.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a kind of regex, with classic operators, such as: **? . ***.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s do it.&lt;/p&gt;
&lt;h2 id=&#34;explanation&#34;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;We would like to find every line where there is an &amp;ldquo;e&amp;rdquo; followed by any character and a &amp;ldquo;4&amp;rdquo;.&lt;br&gt;
For example, the following line matches the pattern.:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;awdawekoodk d ekokd &lt;span style=&#34;color:#ae81ff&#34;&gt;93239&lt;/span&gt; 93994543z k
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To find it, we have to use &lt;em&gt;&lt;em&gt;($0 ~/e.&lt;em&gt;4/)&lt;/em&gt;&lt;/em&gt; because we tell that we want that in each column of the file ($0), we would like to find the pattern &amp;ldquo;e.*4&amp;rdquo;.&lt;br&gt;
For that we use the tilde (&lt;/em&gt;&lt;em&gt;~&lt;/em&gt;&lt;em&gt;) and slashes (&lt;/em&gt;&lt;em&gt;/&lt;/em&gt;*) at the beginning and at the end of our pattern.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - awk - Using the FILENAME variable</title>
      <link>https://www.badprog.com/unix-gnu-linux-awk-using-the-filename-variable/</link>
      <pubDate>Sat, 27 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-awk-using-the-filename-variable/</guid>
      <description>&lt;p&gt;With the awk &lt;strong&gt;FILENAME&lt;/strong&gt; builtin variable, we are able to retrieve the name of the file passed as argument during the execution.&lt;/p&gt;
&lt;p&gt;It will avoid us to use a regex command line. Sometimes interesting.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see this.&lt;/p&gt;
&lt;h2 id=&#34;explanation&#34;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;In the example below, we&amp;rsquo;re going to retrieve the name of the file used as argument and display it. But only if we are scanning the first line.&lt;br&gt;
For that, we&amp;rsquo;re going to use the FNR variable, also a awk builtin variable, to check where we are.&lt;br&gt;
If we&amp;rsquo;re in the first line, we will display the file name.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - awk - Using NR to display line numbers before each line from a file</title>
      <link>https://www.badprog.com/unix-gnu-linux-awk-using-nr-to-display-line-numbers-before-each-line-from-a-file/</link>
      <pubDate>Fri, 26 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-awk-using-nr-to-display-line-numbers-before-each-line-from-a-file/</guid>
      <description>&lt;p&gt;We have a file with customers inside.&lt;/p&gt;
&lt;p&gt;We would like to display all the file with line numbers before each line.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see this in this &lt;strong&gt;awk&lt;/strong&gt; tutorial.&lt;/p&gt;
&lt;h2 id=&#34;explanation&#34;&gt;Explanation&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;NR&lt;/strong&gt; variable is a awk builtin variable, to display the number (a sort of static variable).&lt;br&gt;
The &lt;strong&gt;$0&lt;/strong&gt; represents every column separated by default by the space character.&lt;br&gt;
The coma between will create a space character for our output.&lt;/p&gt;
&lt;p&gt;All the code inside the dev statement, will be executed until there is no line.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - bash - Setting the colour prompt with PS1</title>
      <link>https://www.badprog.com/unix-gnu-linux-bash-setting-the-colour-prompt-with-ps1/</link>
      <pubDate>Mon, 09 Jul 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-bash-setting-the-colour-prompt-with-ps1/</guid>
      <description>&lt;p&gt;You like your shell but you think that some colours would be better.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see how to set colours of the bash prompt with the PS1 variable.&lt;br&gt;
Notice that this tutorial has been made with &lt;strong&gt;Ubuntu 12&lt;/strong&gt;.&lt;br&gt;
Some syntaxes may change depending on the operating system.&lt;/p&gt;
&lt;p&gt;First of all, at your home directory, that you can have with the command &amp;ldquo;~/&amp;rdquo;, there is a configuration file named: &lt;strong&gt;.bashrc&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t see it, type this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - gcc - Option -I for adding includes to the compilation</title>
      <link>https://www.badprog.com/unix-gnu-linux-gcc-option-i-for-adding-includes-to-the-compilation/</link>
      <pubDate>Mon, 04 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-gcc-option-i-for-adding-includes-to-the-compilation/</guid>
      <description>&lt;p&gt;During the compilation step, we can add includes that will be added to the .o generated.&lt;/p&gt;
&lt;p&gt;For that, we use the &lt;strong&gt;-I option&lt;/strong&gt; (this is an uppercase &amp;ldquo;i&amp;rdquo;, standing for &amp;ldquo;include&amp;rdquo;) with the path to the includes we want to add.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s suppose we want to add personal includes previously added in a directory.&lt;br&gt;
So it can be something like that:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gcc -c -o main.o main.c -I&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/home/soft/library/personal/include&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;With a Makefile, we can use this example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - gcc - Option -L for adding libraries during linking</title>
      <link>https://www.badprog.com/unix-gnu-linux-gcc-option-l-for-adding-libraries-during-linking/</link>
      <pubDate>Mon, 04 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-gcc-option-l-for-adding-libraries-during-linking/</guid>
      <description>&lt;p&gt;We can add libraries during the linking step.&lt;br&gt;
This tutorial is the same for &lt;strong&gt;g++&lt;/strong&gt; of course.&lt;/p&gt;
&lt;p&gt;We use for that the &lt;strong&gt;-L option&lt;/strong&gt; and add just after (without any space) the path of the libraries.&lt;br&gt;
Libraries are generally prefixed with &amp;ldquo;&lt;strong&gt;lib&lt;/strong&gt;&amp;rdquo; and suffixed with the &lt;strong&gt;.a&lt;/strong&gt; extension.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s suppose we previously created a library named &lt;strong&gt;libgreatone.a&lt;/strong&gt; in /soft/personal/lib.&lt;br&gt;
We have so: &lt;strong&gt;/soft/personal/lib/libgreatone.a&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;OK, to call this lib, we have first to specify the path and then the name of this library witout the prefix &amp;ldquo;lib&amp;rdquo;.&lt;br&gt;
For the first step, let&amp;rsquo;s use the -L option and for the second one use the -l (an &amp;ldquo;L&amp;rdquo; lowercase).&lt;br&gt;
Notice that there is no space after the -L nor the -l option.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Difference between fork() and vfork()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-difference-between-fork-and-vfork/</link>
      <pubDate>Tue, 01 May 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-difference-between-fork-and-vfork/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;fork()&lt;/strong&gt; and &lt;strong&gt;vfork()&lt;/strong&gt; syscalls are different.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;fork()&lt;/strong&gt; syscall generates two identical processes with separate memory.&lt;br&gt;
The &lt;strong&gt;vfork()&lt;/strong&gt; syscall generates two processes that share the same memory.&lt;/p&gt;
&lt;p&gt;With &lt;strong&gt;vfork()&lt;/strong&gt; the parent will wait for the child terminates.&lt;br&gt;
The parent inherites from the variables that the program is sharing.&lt;br&gt;
So after the child was called, all variables modified inside the child will still be modified inside the parent.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see an example with this tutorial of both fork() and vfork() syscalls.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using wait()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-wait/</link>
      <pubDate>Tue, 01 May 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-wait/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;wait()&lt;/strong&gt; syscall is often used with the &lt;strong&gt;fork()&lt;/strong&gt; syscall.&lt;/p&gt;
&lt;p&gt;Indeed, with the &lt;strong&gt;wait()&lt;/strong&gt; syscall we can be sure that the child will be executed before the parent process.&lt;br&gt;
In a trivial vision, this is like mutexes for threads.&lt;/p&gt;
&lt;p&gt;It means that without the following line, the parent and the child will be executed at the same time:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wait&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;status&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you want to try it, change the line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;i &amp;lt; 10&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;by this one on both parent and child loops:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using accept()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-accept/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-accept/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;accept()&lt;/strong&gt; system call waits a connection from a client.&lt;/p&gt;
&lt;p&gt;For the example above, we are going to take the &lt;strong&gt;nc&lt;/strong&gt; tool (you can use &lt;strong&gt;telnet&lt;/strong&gt;, it is the same).&lt;/p&gt;
&lt;p&gt;If we reach the server through the nc connection, the server will shutdown.&lt;br&gt;
But that&amp;rsquo;s what we want to do.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see it in this &lt;strong&gt;accept()&lt;/strong&gt; tutorial.&lt;/p&gt;
&lt;h2 id=&#34;using-accept&#34;&gt;Using accept()&lt;/h2&gt;
&lt;h3 id=&#34;serverc&#34;&gt;server.c&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* server.c */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &amp;#34;h.h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCP&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;domain &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; AF_INET;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; SOCK_STREAM;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;pe &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getprotobyname&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;domain, s-&amp;gt;type, s-&amp;gt;pe-&amp;gt;p_proto&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;fd, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s, int port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;sockfd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s-&amp;gt;fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addr.sin_family &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s-&amp;gt;domain;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addr.sin_addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; INADDR_ANY;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addr.sin_port &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; htons&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addrlen &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sizeof&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;addr&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;bindValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;fd, &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;const struct sockaddr *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&amp;amp;s-&amp;gt;addr, s-&amp;gt;addrlen&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;bindValue, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_listen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s, int backlog&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;listenValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; listen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;sockfd, backlog&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;listenValue, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_accept&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addrlenAccept &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sizeof&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;addrAccept&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;acceptValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; accept&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;sockfd, &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;struct sockaddr *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&amp;amp;s-&amp;gt;addrAccept, &amp;amp;s-&amp;gt;addrlenAccept&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;acceptValue, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int ac, char *av&lt;span style=&#34;color:#f92672&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t_s s;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ac, ARG_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s, atoi&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;av&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_listen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s, BACKLOG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_accept&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;close&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s.acceptValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;close&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s.fd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;debugc&#34;&gt;debug.c&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* debug.c */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &amp;#34;h.h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== socket() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;domain = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;domain&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;type = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;type&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fd = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;fd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name = %s\n&amp;#34;&lt;/span&gt;, s-&amp;gt;name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p_proto = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;pe-&amp;gt;p_proto&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== bind() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sockfd = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;sockfd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_family = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_family&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_addr.s_addr = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_addr.s_addr&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_port = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;addrlen = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addrlen&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bindValue = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;bindValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== listen() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;listenValue = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;listenValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== accept() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;addrlenAccept = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addrlenAccept&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;acceptValue = %d\n\n&amp;#34;&lt;/span&gt;, s-&amp;gt;acceptValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int test, int error&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;test &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; error&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fprintf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ERROR: %s\n&amp;#34;&lt;/span&gt;, strerror&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int ac, int number&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ac &amp;lt; number&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Usage: ./server [PORT]\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;hh&#34;&gt;h.h&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ifndef H_H_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define H_H_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Define
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define ARG_SIZE 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define BACKLOG 10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define BUF_SIZE 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Structure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;typedef struct mystruct
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* socket */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int domain;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int type;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;char *name;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;struct protoent *pe;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* bind */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int sockfd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;socklen_t addrlen;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;struct sockaddr_in addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int bindValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* listen */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int listenValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* accept */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int acceptValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;socklen_t addrlenAccept;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;struct sockaddr_in addrAccept;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; t_s;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Prototype
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int, int&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int, int&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endif /* H_H_ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;compiling&#34;&gt;Compiling&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcc server.c debug.c -o server ; ./server &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now that the server is launched, it&amp;rsquo;s waiting a connection from a client on the port 5000.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using bind()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-bind/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-bind/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;bind()&lt;/strong&gt; system call function is used with &lt;strong&gt;socket()&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It assigns the address of the second argument to the file descriptor retrieved by &lt;strong&gt;socket()&lt;/strong&gt;.&lt;br&gt;
Of course before using &lt;strong&gt;bind()&lt;/strong&gt;, we must have a valid fd generated by &lt;strong&gt;socket()&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;using-bind&#34;&gt;Using bind()&lt;/h2&gt;
&lt;h3 id=&#34;serverc&#34;&gt;server.c&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* server.c */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &amp;#34;h.h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;name    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCP&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;domain    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; AF_INET;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;type    &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; SOCK_STREAM;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;pe        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getprotobyname&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;fd        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;domain, s-&amp;gt;type, s-&amp;gt;pe-&amp;gt;p_proto&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;fd, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s, int port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;sockfd                &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s-&amp;gt;fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;addr.sin_family        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s-&amp;gt;domain;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;addr.sin_addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; INADDR_ANY;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;addr.sin_port        &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; htons&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;addrlen                &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sizeof&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;addr&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    s-&amp;gt;bindValue            &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;fd, &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;const struct sockaddr *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&amp;amp;s-&amp;gt;addr, s-&amp;gt;addrlen&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;bindValue, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int ac, char *av&lt;span style=&#34;color:#f92672&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    t_s s;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ac, 2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    my_socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    my_bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s, atoi&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;av&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;close&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s.fd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;debugc&#34;&gt;debug.c&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* debug.c */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &amp;#34;h.h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== socket() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;domain = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;domain&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;type = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;type&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fd = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;fd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name = %s\n&amp;#34;&lt;/span&gt;, s-&amp;gt;name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p_proto = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;pe-&amp;gt;p_proto&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== bind() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sockfd = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;sockfd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_family = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_family&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_addr.s_addr = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_addr.s_addr&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_port = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;addrlen = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addrlen&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bindValue = %d\n\n&amp;#34;&lt;/span&gt;, s-&amp;gt;bindValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int test, int error&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;test &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; error&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        fprintf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ERROR: %s\n&amp;#34;&lt;/span&gt;, strerror&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int ac, int number&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ac &amp;lt; number&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Usage: ./server [PORT]\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;hh&#34;&gt;h.h&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ifndef H_H_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define H_H_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; * Structure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;typedef struct mystruct
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int domain;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int type;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    char *name;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    struct protoent *pe;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int sockfd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    socklen_t addrlen;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    struct sockaddr_in addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int bindValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; t_s;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; * Prototype
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int, int&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int, int&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endif /* H_H_ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;compiling&#34;&gt;Compiling&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcc server.c debug.c -o server ; ./server &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;result&#34;&gt;Result&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt; socket&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;domain &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; TCP
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;p_proto &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt; bind&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sockfd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin_family &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin_addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin_port &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;34835&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;addrlen &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bindValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Good job! 😈&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using listen()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-listen/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-listen/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;listen()&lt;/strong&gt; system call is designed to tell that a socket is ready to accept incoming connection.&lt;/p&gt;
&lt;p&gt;Of course, we need first implementing the &lt;strong&gt;socket()&lt;/strong&gt; and &lt;strong&gt;bind()&lt;/strong&gt; system calls.&lt;/p&gt;
&lt;p&gt;We are talking here about the server side.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see how to use the &lt;strong&gt;listen()&lt;/strong&gt; system call with this tutorial.&lt;/p&gt;
&lt;h2 id=&#34;using-listen&#34;&gt;Using listen()&lt;/h2&gt;
&lt;h3 id=&#34;serverc&#34;&gt;server.c&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* server.c */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &amp;#34;h.h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCP&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;domain &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; AF_INET;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; SOCK_STREAM;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;pe &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getprotobyname&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;domain, s-&amp;gt;type, s-&amp;gt;pe-&amp;gt;p_proto&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;fd, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s, int port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;sockfd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s-&amp;gt;fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addr.sin_family &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; s-&amp;gt;domain;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addr.sin_addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; INADDR_ANY;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addr.sin_port &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; htons&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;addrlen &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sizeof&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;addr&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;bindValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;fd, &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;const struct sockaddr *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&amp;amp;s-&amp;gt;addr, s-&amp;gt;addrlen&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;bindValue, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void my_listen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s, int backlog&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s-&amp;gt;listenValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; listen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;sockfd, backlog&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s-&amp;gt;listenValue, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int ac, char *av&lt;span style=&#34;color:#f92672&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t_s s;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ac, ARG_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_socket&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_bind&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s, atoi&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;av&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my_listen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s, BACKLOG&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;close&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;s.fd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;debugc&#34;&gt;debug.c&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/* debug.c */
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &amp;#34;h.h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *s&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== socket() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;domain = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;domain&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;type = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;type&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fd = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;fd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name = %s\n&amp;#34;&lt;/span&gt;, s-&amp;gt;name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p_proto = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;pe-&amp;gt;p_proto&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== bind() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sockfd = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;sockfd&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_family = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_family&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_addr.s_addr = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_addr.s_addr&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sin_port = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addr.sin_port&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;addrlen = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;addrlen&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bindValue = %d\n&amp;#34;&lt;/span&gt;, s-&amp;gt;bindValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n===== listen() =====\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;listenValue = %d\n\n&amp;#34;&lt;/span&gt;, s-&amp;gt;listenValue&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int test, int error&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;test &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; error&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fprintf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ERROR: %s\n&amp;#34;&lt;/span&gt;, strerror&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int ac, int number&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;ac &amp;lt; number&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Usage: ./server [PORT]\n&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;hh&#34;&gt;h.h&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#ifndef H_H_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define H_H_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Define
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define ARG_SIZE 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define BACKLOG 10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Structure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;typedef struct mystruct
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int domain;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int type;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;char *name;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;struct protoent *pe;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int sockfd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;socklen_t addrlen;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;struct sockaddr_in addr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int bindValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int listenValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; t_s;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Prototype
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void debug&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;t_s *&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_error&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int, int&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void check_arg&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int, int&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#endif /* H_H_ */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;compiling&#34;&gt;Compiling&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gcc server.c debug.c -o server ; ./server &lt;span style=&#34;color:#ae81ff&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;result&#34;&gt;Result&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt; socket&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;domain &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; TCP
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;p_proto &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt; bind&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sockfd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin_family &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin_addr.s_addr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sin_port &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;34835&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;addrlen &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bindValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt; listen&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=====&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listenValue &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Great! 😱&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using socket()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-socket/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-socket/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;socket()&lt;/strong&gt; system call function will help us to create an end point.&lt;/p&gt;
&lt;p&gt;This end point will allow for example to connect a client to a server.&lt;br&gt;
Indeed, both of them (client and server) will have a &lt;strong&gt;socket()&lt;/strong&gt; system call function on their implementation.&lt;/p&gt;
&lt;p&gt;In this tutorial of &lt;strong&gt;socket()&lt;/strong&gt; we are going to see how to create a socket for a client and for a server.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see first of all with the server snippet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using read()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-read/</link>
      <pubDate>Tue, 10 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-read/</guid>
      <description>&lt;p&gt;We are going to use the &lt;strong&gt;read()&lt;/strong&gt; function to read on the standard input from our favorite shell.&lt;/p&gt;
&lt;p&gt;So each time you will write something then type ENTER, the text written will be display on the shell.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see this, with this tiny tutorial of the &lt;strong&gt;read()&lt;/strong&gt; function with a C example.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#define BUF_SIZE         1024&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;void empty_buf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;char *buf&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int i;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;buf&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        buf&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ++i;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    buf&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;void&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int gogogo;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int fd;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    char *buf;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    buf &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; malloc&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;sizeof&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;*buf&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; * BUF_SIZE + 1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;buf &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; NULL&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        fprintf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: %s\n&amp;#34;&lt;/span&gt;, strerror&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_FAILURE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fd &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gogogo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 1;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;gogogo&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        read&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;fd, buf, BUF_SIZE&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf = %s\n&amp;#34;&lt;/span&gt;, buf&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        empty_buf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;buf&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;EXIT_SUCCESS&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Good job. 😜&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using gettimeofday()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-gettimeofday/</link>
      <pubDate>Thu, 22 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-gettimeofday/</guid>
      <description>&lt;p&gt;The system call function &lt;strong&gt;gettimeofday()&lt;/strong&gt; is a really helpful one.&lt;/p&gt;
&lt;p&gt;Indeed, we can retrieve milliseconds of the time.&lt;/p&gt;
&lt;p&gt;But in this tutorial, we are going to see how to generate random numbers every millisecond.&lt;/p&gt;
&lt;p&gt;Here the code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int my_random&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    double seed;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    struct timeval  tv;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gettimeofday&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;tv, NULL&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    seed &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tv.tv_sec&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; * &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt; + &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;tv.tv_usec&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; / 1000;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    srand&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;seed&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    usleep&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;10000&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;rand&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; % 255&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main &lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    int i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;i &amp;lt; 10&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;R = %d\n&amp;#34;&lt;/span&gt;, my_random&lt;span style=&#34;color:#f92672&#34;&gt;())&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ++i;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nice example of random every millisecond.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using semget()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-semget/</link>
      <pubDate>Wed, 21 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-semget/</guid>
      <description>&lt;p&gt;Today a tutorial to learn how to use &lt;strong&gt;semget()&lt;/strong&gt;, &lt;strong&gt;semctl()&lt;/strong&gt; and &lt;strong&gt;semop()&lt;/strong&gt; system calls.&lt;/p&gt;
&lt;p&gt;What are these functions?&lt;/p&gt;
&lt;p&gt;They help to share data and control access to these data.&lt;br&gt;
One calls them &lt;strong&gt;semaphore&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We can for example use them to access a data from different process.&lt;/p&gt;
&lt;p&gt;In the example below, we will create two process with the same code, except for the  &lt;strong&gt;sb.sem_op&lt;/strong&gt; value.&lt;/p&gt;
&lt;p&gt;For the first program the value will be 1 and for the second, this value will be -1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using time()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-time/</link>
      <pubDate>Wed, 22 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-time/</guid>
      <description>&lt;p&gt;It is sometimes useful to display the current date in your terminal.&lt;br&gt;
For that the time() system call function is the best one.&lt;br&gt;
Let&amp;rsquo;s see an example within this tiny tutorial of C programming language:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;// main.c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main &lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;time_t myTime;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;time&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;myTime&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The time is: %s&amp;#34;&lt;/span&gt;, ctime&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&amp;amp;myTime&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Compiling and executing.&lt;br&gt;
And the result is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ The time is: Wed Feb &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt; 14:36:43 &lt;span style=&#34;color:#ae81ff&#34;&gt;2012&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;All simply!&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Emacs - Auto-completion with Auto-complete</title>
      <link>https://www.badprog.com/unix-gnu-linux-emacs-auto-completion-with-auto-complete/</link>
      <pubDate>Tue, 03 May 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-emacs-auto-completion-with-auto-complete/</guid>
      <description>&lt;p&gt;We all agree, without any auto-completion, write always the same functions is really annoying.&lt;br&gt;
A guy named Tomohiro Matsuyama has created an auto-completion plugin, really helpful.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s install it together in this tutorial.&lt;br&gt;
First of all, &lt;a href=&#34;http://cx4a.org/software/auto-complete/&#34;&gt;download the latest auto-complete&amp;rsquo;s version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We have now to extract it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar xjf auto-complete-1.3.1.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open a new file with Emacs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ emacs badprog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Wihtin, type ALT + X and write &lt;em&gt;load-file&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Type RETURN.&lt;/p&gt;
&lt;p&gt;And write it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - User commands - Using info</title>
      <link>https://www.badprog.com/unix-gnu-linux-user-commands-using-info/</link>
      <pubDate>Fri, 08 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-user-commands-using-info/</guid>
      <description>&lt;p&gt;The info user command is designed to display all information about a command.&lt;/p&gt;
&lt;p&gt;It is more detailled than the man user command with several menu.&lt;/p&gt;
&lt;p&gt;For example you can go throw a menu and click ENTER to enter in this menu:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ info open
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this info you can see this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Menu:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Linked Channels:: Dealing with channels sharing a file position.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Independent Channels:: Dealing with separately opened, unlinked channels.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Cleaning Streams:: Cleaning a stream makes it safe to use
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;another channel.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Put your cursor on:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using stat()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-stat/</link>
      <pubDate>Thu, 07 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-stat/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;system call stat function&lt;/strong&gt; is designed to retrieve statistics of a file or a directory.&lt;/p&gt;
&lt;p&gt;Simply add the &lt;strong&gt;path of your file or directory&lt;/strong&gt; in the first parameter, then the variable of type &lt;strong&gt;struct stat&lt;/strong&gt; in the second parameter.&lt;/p&gt;
&lt;p&gt;The function stat returns 0 on success and -1 on error.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s try an example of the &lt;strong&gt;system call stat function&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int c, char *v&lt;span style=&#34;color:#f92672&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;struct stat *buf;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;buf &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; malloc&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;sizeof&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;*buf&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;stat&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;v&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, buf&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_dev = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_dev&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_ino = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_ino&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_mode = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_mode&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_nlink = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_nlink&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_uid = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_uid&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_gid = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_gid&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_rdev = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_rdev&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_size = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_size&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_blksize = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_blksize&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_blocks = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_blocks&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_atime = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_atime&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_mtime = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_mtime&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;buf-&amp;gt;st_ctime = %d\n&amp;#34;&lt;/span&gt;, buf-&amp;gt;st_ctime&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You are now ready to create a file, named hello.bp (the extension is free of course).&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - User commands - Using man</title>
      <link>https://www.badprog.com/unix-gnu-linux-user-commands-using-man/</link>
      <pubDate>Thu, 07 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-user-commands-using-man/</guid>
      <description>&lt;p&gt;The man of Linux can help us to find some helpful information of functions.&lt;br&gt;
This manual is splitted into eight parts.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;General commands&lt;/li&gt;
&lt;li&gt;System calls&lt;/li&gt;
&lt;li&gt;C or other language library functions&lt;/li&gt;
&lt;li&gt;Special files (usually devices, those found in /dev) and drivers&lt;/li&gt;
&lt;li&gt;File formats and conventions&lt;/li&gt;
&lt;li&gt;Games and screensavers&lt;/li&gt;
&lt;li&gt;Miscellaneous&lt;/li&gt;
&lt;li&gt;System administration commands and daemons&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example, to see the man of the open() function, you can use the:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ man &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; open
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - User commands - Using wc</title>
      <link>https://www.badprog.com/unix-gnu-linux-user-commands-using-wc/</link>
      <pubDate>Sun, 27 Mar 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-user-commands-using-wc/</guid>
      <description>&lt;p&gt;The user command &lt;strong&gt;wc&lt;/strong&gt; is a GNU/Linux tool written by Paul Rubin and David MacKenzie.&lt;/p&gt;
&lt;p&gt;It helps us to display the number of lines, words and bytes counted in one or several files.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see an example of the user command &lt;strong&gt;wc&lt;/strong&gt; by executing this command in our favourite terminal:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ wc -l *
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It will display the number of lines in all files present in the current directory.&lt;/p&gt;
&lt;p&gt;You can combine all flags at the same time and the result will be displayed in different colums:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - User commands - Using grep</title>
      <link>https://www.badprog.com/unix-gnu-linux-user-commands-using-grep/</link>
      <pubDate>Tue, 22 Mar 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-user-commands-using-grep/</guid>
      <description>&lt;p&gt;Maybe you sometimes asked yourself how to find a part of a code inside all your files.&lt;br&gt;
But how to find this part of code?&lt;br&gt;
We can use the &lt;strong&gt;grep&lt;/strong&gt; user command to display this part of a code.&lt;/p&gt;
&lt;p&gt;We can moreover display this code in color.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s see an example of the &lt;strong&gt;grep&lt;/strong&gt; user command.&lt;/p&gt;
&lt;p&gt;The line below has to be typed directly in your favourite shell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ grep --color main *
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The result is the code &amp;ldquo;main&amp;rdquo; in red and the file where the code is found (in purple).&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - User commands - Using fs</title>
      <link>https://www.badprog.com/unix-gnu-linux-user-commands-using-fs/</link>
      <pubDate>Fri, 18 Mar 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-user-commands-using-fs/</guid>
      <description>&lt;p&gt;To set ACL correctly, you can use the f&lt;strong&gt;s&lt;/strong&gt; user command.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take an example to set the ACL:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fs setacl path/until/directory name command
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we want to see ACL list, let&amp;rsquo;s execute this with the &lt;strong&gt;la&lt;/strong&gt; (for &lt;strong&gt;l&lt;/strong&gt; ist &lt;strong&gt;a&lt;/strong&gt; cl):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fs la path/until/directory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To remove all the ACL rights for the user &lt;em&gt;&lt;strong&gt;system:anyuser&lt;/strong&gt;&lt;/em&gt; we have to write it (&lt;strong&gt;sa&lt;/strong&gt; for &lt;strong&gt;s&lt;/strong&gt; et&lt;strong&gt;a&lt;/strong&gt; cl):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ fs sa directory system:anyuser none
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using execve()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-execve/</link>
      <pubDate>Sun, 06 Mar 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-execve/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;execve()&lt;/strong&gt; system call function is used to execute a binary executable or a script.&lt;br&gt;
The function returns &lt;strong&gt;nothing on success&lt;/strong&gt; and &lt;strong&gt;-1 on error&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The first parameter must be the path of a binary executable or a script.&lt;br&gt;
The second must be an array of pointers on a character (char *myArray[]), and the last pointer must be set to NULL.&lt;br&gt;
The third parameter must be an environment.&lt;/p&gt;
&lt;h2 id=&#34;using-the-execve-syscall&#34;&gt;Using the execve() syscall&lt;/h2&gt;
&lt;h3 id=&#34;first-example&#34;&gt;First example&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* Badprog.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;* main.c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int e;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;char *envp&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; NULL &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;char *argv&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/bin/ls&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-l&amp;#34;&lt;/span&gt;, NULL &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;e &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; execve&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/bin/ls&amp;#34;&lt;/span&gt;, argv, envp&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;e &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; -1&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fprintf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;stderr, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Error: %s\n&amp;#34;&lt;/span&gt;, strerror&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;compiling&#34;&gt;Compiling&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gcc main.c -o execve-me ; ./execve-me
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;ouput&#34;&gt;Ouput&lt;/h3&gt;
&lt;p&gt;The output is a classic &lt;em&gt;ls -la&lt;/em&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Emacs - Phases of the Moon</title>
      <link>https://www.badprog.com/unix-gnu-linux-emacs-phases-of-the-moon/</link>
      <pubDate>Wed, 23 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-emacs-phases-of-the-moon/</guid>
      <description>&lt;p&gt;Yes it really exits!&lt;br&gt;
You can see, with Emacs, the phase of the Moon for the next 12 weeks.&lt;/p&gt;
&lt;p&gt;Make an ALT + X and write this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lunar-phases
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Result:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tuesday, January 4, 2011: New Moon 10:05am &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wednesday, January 12, 2011: First Quarter Moon 12:33pm &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wednesday, January 19, 2011: Full Moon 10:19pm &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wednesday, January 26, 2011: Last Quarter Moon 2:03pm &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Thursday, February 3, 2011: New Moon 3:33am &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Friday, February 11, 2011: First Quarter Moon 8:20am &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Friday, February 18, 2011: Full Moon 9:33am &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Friday, February 25, 2011: Last Quarter Moon 12:32am &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Friday, March 4, 2011: New Moon 9:48pm &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Sunday, March 13, 2011: First Quarter Moon 12:46am &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Saturday, March 19, 2011: Full Moon 7:07pm &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Saturday, March 26, 2011: Last Quarter Moon 1:12pm &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;CET&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Enjoy!&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Emacs - Display number lines</title>
      <link>https://www.badprog.com/unix-gnu-linux-emacs-display-number-lines/</link>
      <pubDate>Tue, 15 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-emacs-display-number-lines/</guid>
      <description>&lt;p&gt;If you want to see number of lines in Emacs, you have to activate it.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start this tiny tutorial:&lt;/p&gt;
&lt;p&gt;Open Emacs, click &lt;strong&gt;ALT + X&lt;/strong&gt; and write &lt;strong&gt;linum-mode&lt;/strong&gt; then type RETURN.&lt;/p&gt;
&lt;p&gt;Well done, it works!&lt;/p&gt;
&lt;p&gt;To deactivate it, just retype this command.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - gdb - With Emacs</title>
      <link>https://www.badprog.com/unix-gnu-linux-gdb-with-emacs/</link>
      <pubDate>Mon, 14 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-gdb-with-emacs/</guid>
      <description>&lt;p&gt;To start gdb, we have to add the &lt;strong&gt;-g flag&lt;/strong&gt; at the compilation time.&lt;br&gt;
So it is easy to add it in a Makefile. We are also using the &lt;strong&gt;Emacs&lt;/strong&gt; IDE for running gdb.&lt;br&gt;
Note that the code below does not work because we want to see the segmentation fault with gdb.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s create a main.c file in our gdb mini tutorial:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int c, char *v&lt;span style=&#34;color:#f92672&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;char *string; int i;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; 0;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;i &amp;lt; strlen&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;v&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%c&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;i&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i++;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let see an example of the gdb using:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - tcsh - Setting prompt with country flags</title>
      <link>https://www.badprog.com/unix-gnu-linux-tcsh-setting-prompt-with-country-flags/</link>
      <pubDate>Mon, 14 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tcsh-setting-prompt-with-country-flags/</guid>
      <description>&lt;p&gt;If you have always dreamed to change the classic prompt of your favorite Shell, it is time to see how to do it. Open your tcsh&amp;rsquo;s config that you can find in your home, it is called &lt;em&gt;.tcshrc&lt;/em&gt; and inside, modify the line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set prompt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;(%n@%m %h)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;by&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set prompt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;%T %/%B%{\033[1;31m%}&amp;gt;%{\033[0m%}%b&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Open a new terminal or juste write &amp;ldquo;&lt;strong&gt;. .bashrc&lt;/strong&gt;&amp;rdquo; on your terminal, and miracle, you have now the time, your current path and a &lt;em&gt;&amp;gt;&lt;/em&gt; in red and bold!&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using open()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-open/</link>
      <pubDate>Thu, 03 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-open/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;open()&lt;/strong&gt; system call function is used to open a file.&lt;br&gt;
We have to pass the pathname of the file we want to open, then a flag in the second parameter. This second one has to be a flag among the following ones:&lt;br&gt;
O_RDONLY, O_WRONLY or O_RDWR.&lt;/p&gt;
&lt;p&gt;An important thing is that this function will always return a non negative integer on success.&lt;br&gt;
This return value will be used by others functions, such as read() or write() for example, as a file descriptor.&lt;br&gt;
As all system calls, if the function returns -1, it will mean that an error has occurred. Errors are POSIX standard.&lt;br&gt;
The value 0, 1 and 2 are already reserved by the system, so if we open a new file that exists, its integer value will be 3 or more.&lt;br&gt;
Let&amp;rsquo;s see why.&lt;br&gt;
Write it successively on your favourite terminal:&lt;br&gt;
ls -la /dev/ stdin&lt;br&gt;
ls -la /dev/stdout&lt;br&gt;
ls -la /dev/stderr&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Tips and tricks - Change the screen resolution</title>
      <link>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-change-the-screen-resolution/</link>
      <pubDate>Thu, 03 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-change-the-screen-resolution/</guid>
      <description>&lt;p&gt;The command to change the screen resolution is &lt;strong&gt;xrandr&lt;/strong&gt;, To see all size available for your screen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ xrandr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To choose the another one resolution just use the -s option with the resolution, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ xrandr -s 800x600
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - gcc - Commands -v</title>
      <link>https://www.badprog.com/unix-gnu-linux-gcc-commands-v/</link>
      <pubDate>Wed, 02 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-gcc-commands-v/</guid>
      <description>&lt;p&gt;With the -v command of the gcc, you can see all programs invoked by the compiler. Let&amp;rsquo;s try with an example of the -v command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gcc -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Result (certainly different on your system):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Using built-in specs.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Target: i686-redhat-linux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Configured with: ../configure --prefix&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr --mandir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/share/man --infodir&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/share/info --with-bugurl&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;posix --enable-checking&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;gtk --disable-dssi --with-java-home&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;generic --with-arch&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;i686 --build&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;i686-redhat-linux
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Thread model: posix
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gcc version 4.4.4 &lt;span style=&#34;color:#ae81ff&#34;&gt;20100503&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;Red Hat 4.4.4-2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;GCC&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - tar - The xvf command</title>
      <link>https://www.badprog.com/unix-gnu-linux-tar-the-xvf-command/</link>
      <pubDate>Wed, 02 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tar-the-xvf-command/</guid>
      <description>&lt;p&gt;The xvf command of the tar tool allows to extract files from a file with the .tgz extension, in the current folder. Let&amp;rsquo;s see an example of the xvf command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar xvf /home/login/Downloads/myArchive.tgz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It will extract all files present in the archive into the current directory in a new directory with the name of the first directory of the archive file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - Tips and tricks - Change keyboard language</title>
      <link>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-change-keyboard-language/</link>
      <pubDate>Sun, 30 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tips-and-tricks-change-keyboard-language/</guid>
      <description>&lt;p&gt;An easy way to change the keyboard language on Linux is to write this command on your favourite terminal:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setxkbmap lang
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where &lt;em&gt;lang&lt;/em&gt; is the language you want. As an example to change the keyboard in french:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setxbmap fr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or for an american keyboard:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;setxbmap us
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using tgetflag()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-tgetflag/</link>
      <pubDate>Thu, 20 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-tgetflag/</guid>
      <description>&lt;p&gt;The tgetflag() function is a Linux system call function. It is designed to be used with the getenv() and tgetent() functions.&lt;br&gt;
The tgetflag() function returns a boolean value: 1 on success or 0 on fail.&lt;/p&gt;
&lt;p&gt;With the tgetflag() function, we have to put an only one string parameter. You have to use the two letters of the appropriate termcaps. You can find all of them in the Boolean Capabilities of the termcap manual.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using getenv()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-getenv/</link>
      <pubDate>Wed, 19 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-getenv/</guid>
      <description>&lt;p&gt;The getenv() function is a Linux system call function.&lt;/p&gt;
&lt;p&gt;It is designed to know what is the name of an environment variable.&lt;/p&gt;
&lt;p&gt;The main use is for the &amp;ldquo;TERM&amp;rdquo; variable. Let&amp;rsquo;s see an example of the getenv() function:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** Made by BadproG.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;const char *name;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TERM&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;printf&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;My terminal is %s.\n&amp;#34;&lt;/span&gt;, getenv&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;name&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using tgetent()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-tgetent/</link>
      <pubDate>Wed, 19 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-tgetent/</guid>
      <description>&lt;p&gt;The tgetent() function is a Linux system call function. It is designed to be used with other termcap functions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tgetflag&lt;/li&gt;
&lt;li&gt;tgetnum&lt;/li&gt;
&lt;li&gt;tgetstr&lt;/li&gt;
&lt;li&gt;tgoto&lt;/li&gt;
&lt;li&gt;tputs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the tgetent() function, we stock in the first parameter (a buffer pointer), the capabilities of the second parameter (the environment variable retrieved by the getenv() function).&lt;br&gt;
This function returns 1 on success, 0 if there is not a such description and -1 if the terminfo database is not found.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - Using tgetnum()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-using-tgetnum/</link>
      <pubDate>Wed, 19 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-using-tgetnum/</guid>
      <description>&lt;p&gt;The tgetnum() function is a Linux system call function. It is designed to be used with the getenv() and tgetent() functions.&lt;br&gt;
If the description of the terminal is not found, most probably because there is no result in the tgetent() function, the tgetnum() one will return -1.&lt;/p&gt;
&lt;p&gt;With the tgetnum() function, we have to put an only one string parameter. You have to use the two letters of the appropriate termcaps. You can find all of them in the Numeric capabilities of the termcap manual.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - opendir()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-opendir/</link>
      <pubDate>Tue, 11 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-opendir/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;opendir()&lt;/strong&gt; system call function is used to open a directory and to return a pointer on this directory.&lt;br&gt;
Let&amp;rsquo;s take an example of the using of the &lt;strong&gt;opendir&lt;/strong&gt; system call function.&lt;/p&gt;
&lt;p&gt;First, we have to create two files: a directory named &lt;em&gt;hello&lt;/em&gt; and file name &lt;em&gt;world&lt;/em&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir hello
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch world
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And now let&amp;rsquo;s create the main.c file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** Made by BadproG.com
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;int main&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;int c, char *v&lt;span style=&#34;color:#f92672&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DIR *myDirectory;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;myDirectory &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opendir&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;v&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;c &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 2&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;myDirectory&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OK the folder is opened.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;** closedir
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;closedir&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;myDirectory&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; 0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The directory is now closed.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The directory can not be closed.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; ENOENT&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;This directory does not exist.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; ENOTDIR&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;This file is not a directory.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;errno &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; EACCES&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;You do not have the right to open this folder.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;That&amp;#39;s a new error, check the manual.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;puts&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sorry we need exactly 2 arguments.&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s try:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - readdir()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-readdir/</link>
      <pubDate>Tue, 11 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-readdir/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;readdir()&lt;/strong&gt; system call function is used to read into a directory.&lt;br&gt;
The function returns a pointer to a &lt;em&gt;dirent&lt;/em&gt; structure. This structure contains five fields but only two are POSIX standard, this is the &lt;em&gt;d_name&lt;/em&gt; and the &lt;em&gt;d_ino&lt;/em&gt; member.&lt;br&gt;
That&amp;rsquo;s the first we will use in our &lt;strong&gt;readdir()&lt;/strong&gt; example.&lt;/p&gt;
&lt;p&gt;Before starting, let&amp;rsquo;s create some files. We need a folder named &lt;em&gt;hello&lt;/em&gt;.&lt;br&gt;
In the &lt;em&gt;hello&lt;/em&gt; directory, let&amp;rsquo;s create three new files: a folder named &lt;em&gt;one&lt;/em&gt; and two files named &lt;em&gt;girl&lt;/em&gt; and &lt;em&gt;boy&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - tcsh - Builtin commands source</title>
      <link>https://www.badprog.com/unix-gnu-linux-tcsh-builtin-commands-source/</link>
      <pubDate>Fri, 07 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-tcsh-builtin-commands-source/</guid>
      <description>&lt;p&gt;In this tutorial we will see what is the &lt;strong&gt;source&lt;/strong&gt; builtin command.&lt;br&gt;
We will set the prompt of our tcsh as example.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s go.&lt;br&gt;
We can change the prompt with a script. But without modifying the .tcshrc file. It means that each new terminal you will open will be with the default shell config, in this case .tcshrc.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s make a classic script by creating a new file named tcshScript.&lt;br&gt;
Let&amp;rsquo;s open it and write this inside:&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - make - Makefile</title>
      <link>https://www.badprog.com/unix-gnu-linux-make-makefile/</link>
      <pubDate>Thu, 06 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-make-makefile/</guid>
      <description>&lt;p&gt;A &lt;strong&gt;Makefile&lt;/strong&gt; has to be named &lt;strong&gt;Makefile&lt;/strong&gt; with the first letter in capitalize.&lt;/p&gt;
&lt;p&gt;There can be only one such file.&lt;br&gt;
It is called with the &lt;strong&gt;make&lt;/strong&gt; tool.&lt;br&gt;
To use it simply write &lt;strong&gt;make&lt;/strong&gt; on your terminal and it will execute the rules in your &lt;strong&gt;Makefile&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Using a &lt;strong&gt;Makefile&lt;/strong&gt; is really helpful.&lt;br&gt;
It automates tasks you have to do.&lt;br&gt;
Let us take some examples:&lt;/p&gt;
&lt;p&gt;In this first example, the &lt;em&gt;Variables&lt;/em&gt; section contains 3 variables.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System call functions</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-call-functions/</link>
      <pubDate>Mon, 03 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-call-functions/</guid>
      <description>&lt;p&gt;List of Linux system call functions.&lt;br&gt;
These functions need one or more appropriate headers for each one of them.&lt;/p&gt;
&lt;p&gt;These headers can be found in this directory on your operating system: /usr/include/&lt;/p&gt;
&lt;p&gt;And if you want to learn more of them, just write &lt;strong&gt;man&lt;/strong&gt; 2 &lt;em&gt;&lt;strong&gt;theNameOfTheFunction&lt;/strong&gt;&lt;/em&gt; on your favorite shell.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ man &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; open
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Why 2?&lt;br&gt;
Because it is the number chosen for the system call functions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UNIX &amp; GNU/Linux - System calls - fork()</title>
      <link>https://www.badprog.com/unix-gnu-linux-system-calls-fork/</link>
      <pubDate>Mon, 03 Jan 2011 00:00:00 +0000</pubDate>
      <guid>https://www.badprog.com/unix-gnu-linux-system-calls-fork/</guid>
      <description>&lt;p&gt;The &lt;strong&gt;fork()&lt;/strong&gt; function is a &lt;strong&gt;Linux system call function&lt;/strong&gt;.&lt;br&gt;
It is used to make a new identical process from another one.&lt;/p&gt;
&lt;p&gt;The original process becoming the parent and the new process becoming its child. The both are alive at the same time.&lt;/p&gt;
&lt;p&gt;But when the fork() function is called, both process will terminate with the same end.&lt;/p&gt;
&lt;p&gt;Let us see an example of the fork() function with 3 fonctions:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;** Made by BadproG.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;void begin()&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#############&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### BEGIN ###&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#############&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ending&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;##############&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;### ENDING ###&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;##############&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;begin&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Here the neutral code&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fork&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;puts&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Here the code after fork()&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ending&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We compile:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
