<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Keks</id>
	<title>Sistemi Operativi - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Keks"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/Keks"/>
	<updated>2026-04-30T16:34:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2961</id>
		<title>Prove pratiche 2022</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2961"/>
		<updated>2023-04-02T12:06:08Z</updated>

		<summary type="html">&lt;p&gt;Keks: /* Proposta 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2022-09-07 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da controllare, 09/03/2023&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *const argv[]) {&lt;br /&gt;
    if (argc &amp;lt; 2) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;Non ci sono abbastanza parametri per lo script\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        int wstatus;&lt;br /&gt;
        if (fork()) {&lt;br /&gt;
            execvp(argv[1], argv + 1);&lt;br /&gt;
        } else {&lt;br /&gt;
            wait(&amp;amp;wstatus);&lt;br /&gt;
            int status = WEXITSTATUS(wstatus);&lt;br /&gt;
            printf(&amp;quot;return value ***************** %d\n&amp;quot;, status);&lt;br /&gt;
            if (status != 0) {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da contorllare [[User:Flecart|Flecart]] ([[User talk:Flecart|talk]]) 14:52, 9 March 2023 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import stat&lt;br /&gt;
&lt;br /&gt;
def is_elf(file):&lt;br /&gt;
    with open(file, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
        magic = f.read()[:4]&lt;br /&gt;
        if magic == b'\x7fELF':&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def count(dir):&lt;br /&gt;
    if not os.path.isdir(dir):&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    num_bits = 0 &lt;br /&gt;
    for root, dir, files in os.walk(dir):&lt;br /&gt;
        for file in files:&lt;br /&gt;
            end_path = os.path.join(root, file)&lt;br /&gt;
            if is_elf(end_path):&lt;br /&gt;
                num_bits += os.lstat(end_path).st_size&lt;br /&gt;
&lt;br /&gt;
        break; # per non andare in altre directory&lt;br /&gt;
&lt;br /&gt;
    return num_bits&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    num_args = len(sys.argv);&lt;br /&gt;
    &lt;br /&gt;
    num_bits = 0&lt;br /&gt;
    for i in range(1, num_args):&lt;br /&gt;
        num_bits += count(sys.argv[i]) &lt;br /&gt;
&lt;br /&gt;
    if num_args == 1:&lt;br /&gt;
        num_bits += count(&amp;quot;./&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;number of bits is : {num_bits}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Proposta 2 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os, sys, subprocess, re&lt;br /&gt;
print(sum([os.path.getsize(pa+'/'+f) if re.search(&amp;quot;ELF\s.*exec&amp;quot;, str(subprocess.run([&amp;quot;file&amp;quot;, pa+&amp;quot;/&amp;quot;+f], stdout=subprocess.PIPE).stdout)) else 0 for pa in (sys.argv[1:] if len(sys.argv)&amp;gt;1 else [&amp;quot;.&amp;quot;]) for f in os.listdir(pa)]),&amp;quot;bytes&amp;quot;) if __name__==&amp;quot;__main__&amp;quot; else None&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 4 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2022-06-22 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
==== rx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void received_string(int signo, siginfo_t *info, void *context){&lt;br /&gt;
    long msg_long = (long)info-&amp;gt;si_value.sival_ptr;&lt;br /&gt;
    if(msg_long == 0)&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    else{&lt;br /&gt;
        char msg;&lt;br /&gt;
        for(int i=0, last = 0; i&amp;lt;8; i++){&lt;br /&gt;
            last = msg_long%256;&lt;br /&gt;
            msg_long = msg_long&amp;gt;&amp;gt;8;&lt;br /&gt;
            printf(&amp;quot;%c&amp;quot;, last);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    union sigval v;&lt;br /&gt;
    sigqueue(info-&amp;gt;si_pid, SIGUSR1, v);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, getpid());&lt;br /&gt;
    struct sigaction act;&lt;br /&gt;
    act.sa_sigaction = received_string;&lt;br /&gt;
    act.sa_flags = SA_SIGINFO;&lt;br /&gt;
    sigaction(SIGUSR1, &amp;amp;act, NULL);&lt;br /&gt;
    while(1)&lt;br /&gt;
        sleep(20);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    if(argc&amp;lt;3)&lt;br /&gt;
        exit(EXIT_FAILURE);&lt;br /&gt;
    int rxpid = atoi(argv[1]),&lt;br /&gt;
        base = 0,&lt;br /&gt;
        i,&lt;br /&gt;
        retsig;&lt;br /&gt;
    long msg;&lt;br /&gt;
    union sigval val;&lt;br /&gt;
&lt;br /&gt;
    sigset_t ret_set;&lt;br /&gt;
    sigemptyset(&amp;amp;ret_set);&lt;br /&gt;
    sigaddset(&amp;amp;ret_set, SIGUSR1);&lt;br /&gt;
    sigprocmask(SIG_BLOCK, &amp;amp;ret_set, NULL);&lt;br /&gt;
    do{&lt;br /&gt;
        msg = 0;&lt;br /&gt;
        for(i=base; i&amp;lt;base+8&amp;amp;&amp;amp;argv[2][i]!=0; i++)&lt;br /&gt;
            msg += (long)argv[2][i]&amp;lt;&amp;lt;8*(i%8);&lt;br /&gt;
        val.sival_ptr = (void*)msg;&lt;br /&gt;
        sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
        sigwait(&amp;amp;ret_set, &amp;amp;retsig);&lt;br /&gt;
        base+=8;&lt;br /&gt;
    }while(argv[2][i]!=0);&lt;br /&gt;
    val.sival_ptr = 0;&lt;br /&gt;
    sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Keks</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2960</id>
		<title>Prove pratiche 2022</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2960"/>
		<updated>2023-04-02T11:54:05Z</updated>

		<summary type="html">&lt;p&gt;Keks: /* Proposta 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2022-09-07 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da controllare, 09/03/2023&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *const argv[]) {&lt;br /&gt;
    if (argc &amp;lt; 2) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;Non ci sono abbastanza parametri per lo script\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        int wstatus;&lt;br /&gt;
        if (fork()) {&lt;br /&gt;
            execvp(argv[1], argv + 1);&lt;br /&gt;
        } else {&lt;br /&gt;
            wait(&amp;amp;wstatus);&lt;br /&gt;
            int status = WEXITSTATUS(wstatus);&lt;br /&gt;
            printf(&amp;quot;return value ***************** %d\n&amp;quot;, status);&lt;br /&gt;
            if (status != 0) {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da contorllare [[User:Flecart|Flecart]] ([[User talk:Flecart|talk]]) 14:52, 9 March 2023 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import stat&lt;br /&gt;
&lt;br /&gt;
def is_elf(file):&lt;br /&gt;
    with open(file, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
        magic = f.read()[:4]&lt;br /&gt;
        if magic == b'\x7fELF':&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def count(dir):&lt;br /&gt;
    if not os.path.isdir(dir):&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    num_bits = 0 &lt;br /&gt;
    for root, dir, files in os.walk(dir):&lt;br /&gt;
        for file in files:&lt;br /&gt;
            end_path = os.path.join(root, file)&lt;br /&gt;
            if is_elf(end_path):&lt;br /&gt;
                num_bits += os.lstat(end_path).st_size&lt;br /&gt;
&lt;br /&gt;
        break; # per non andare in altre directory&lt;br /&gt;
&lt;br /&gt;
    return num_bits&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    num_args = len(sys.argv);&lt;br /&gt;
    &lt;br /&gt;
    num_bits = 0&lt;br /&gt;
    for i in range(1, num_args):&lt;br /&gt;
        num_bits += count(sys.argv[i]) &lt;br /&gt;
&lt;br /&gt;
    if num_args == 1:&lt;br /&gt;
        num_bits += count(&amp;quot;./&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;number of bits is : {num_bits}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Proposta 2 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os, sys, subprocess, re&lt;br /&gt;
print(sum([os.path.getsize(pa+'/'+f) if re.search(&amp;quot;ELF\s.*exec&amp;quot;, str(subprocess.run([&amp;quot;file&amp;quot;, pa+&amp;quot;/&amp;quot;+f], stdout=subprocess.PIPE).stdout)) else 0 for pa in (sys.argv[1:] if len(sys.argv)&amp;gt;1 else [&amp;quot;.&amp;quot;]) for f in os.listdir(pa)])+&amp;quot; bytes&amp;quot;) if __name__==&amp;quot;__main__&amp;quot; else None&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 4 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2022-06-22 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
==== rx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void received_string(int signo, siginfo_t *info, void *context){&lt;br /&gt;
    long msg_long = (long)info-&amp;gt;si_value.sival_ptr;&lt;br /&gt;
    if(msg_long == 0)&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    else{&lt;br /&gt;
        char msg;&lt;br /&gt;
        for(int i=0, last = 0; i&amp;lt;8; i++){&lt;br /&gt;
            last = msg_long%256;&lt;br /&gt;
            msg_long = msg_long&amp;gt;&amp;gt;8;&lt;br /&gt;
            printf(&amp;quot;%c&amp;quot;, last);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    union sigval v;&lt;br /&gt;
    sigqueue(info-&amp;gt;si_pid, SIGUSR1, v);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, getpid());&lt;br /&gt;
    struct sigaction act;&lt;br /&gt;
    act.sa_sigaction = received_string;&lt;br /&gt;
    act.sa_flags = SA_SIGINFO;&lt;br /&gt;
    sigaction(SIGUSR1, &amp;amp;act, NULL);&lt;br /&gt;
    while(1)&lt;br /&gt;
        sleep(20);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    if(argc&amp;lt;3)&lt;br /&gt;
        exit(EXIT_FAILURE);&lt;br /&gt;
    int rxpid = atoi(argv[1]),&lt;br /&gt;
        base = 0,&lt;br /&gt;
        i,&lt;br /&gt;
        retsig;&lt;br /&gt;
    long msg;&lt;br /&gt;
    union sigval val;&lt;br /&gt;
&lt;br /&gt;
    sigset_t ret_set;&lt;br /&gt;
    sigemptyset(&amp;amp;ret_set);&lt;br /&gt;
    sigaddset(&amp;amp;ret_set, SIGUSR1);&lt;br /&gt;
    sigprocmask(SIG_BLOCK, &amp;amp;ret_set, NULL);&lt;br /&gt;
    do{&lt;br /&gt;
        msg = 0;&lt;br /&gt;
        for(i=base; i&amp;lt;base+8&amp;amp;&amp;amp;argv[2][i]!=0; i++)&lt;br /&gt;
            msg += (long)argv[2][i]&amp;lt;&amp;lt;8*(i%8);&lt;br /&gt;
        val.sival_ptr = (void*)msg;&lt;br /&gt;
        sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
        sigwait(&amp;amp;ret_set, &amp;amp;retsig);&lt;br /&gt;
        base+=8;&lt;br /&gt;
    }while(argv[2][i]!=0);&lt;br /&gt;
    val.sival_ptr = 0;&lt;br /&gt;
    sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Keks</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2959</id>
		<title>Prove pratiche 2022</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2959"/>
		<updated>2023-04-01T14:52:06Z</updated>

		<summary type="html">&lt;p&gt;Keks: /* rx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2022-09-07 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da controllare, 09/03/2023&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *const argv[]) {&lt;br /&gt;
    if (argc &amp;lt; 2) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;Non ci sono abbastanza parametri per lo script\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        int wstatus;&lt;br /&gt;
        if (fork()) {&lt;br /&gt;
            execvp(argv[1], argv + 1);&lt;br /&gt;
        } else {&lt;br /&gt;
            wait(&amp;amp;wstatus);&lt;br /&gt;
            int status = WEXITSTATUS(wstatus);&lt;br /&gt;
            printf(&amp;quot;return value ***************** %d\n&amp;quot;, status);&lt;br /&gt;
            if (status != 0) {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da contorllare [[User:Flecart|Flecart]] ([[User talk:Flecart|talk]]) 14:52, 9 March 2023 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import stat&lt;br /&gt;
&lt;br /&gt;
def is_elf(file):&lt;br /&gt;
    with open(file, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
        magic = f.read()[:4]&lt;br /&gt;
        if magic == b'\x7fELF':&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def count(dir):&lt;br /&gt;
    if not os.path.isdir(dir):&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    num_bits = 0 &lt;br /&gt;
    for root, dir, files in os.walk(dir):&lt;br /&gt;
        for file in files:&lt;br /&gt;
            end_path = os.path.join(root, file)&lt;br /&gt;
            if is_elf(end_path):&lt;br /&gt;
                num_bits += os.lstat(end_path).st_size&lt;br /&gt;
&lt;br /&gt;
        break; # per non andare in altre directory&lt;br /&gt;
&lt;br /&gt;
    return num_bits&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    num_args = len(sys.argv);&lt;br /&gt;
    &lt;br /&gt;
    num_bits = 0&lt;br /&gt;
    for i in range(1, num_args):&lt;br /&gt;
        num_bits += count(sys.argv[i]) &lt;br /&gt;
&lt;br /&gt;
    if num_args == 1:&lt;br /&gt;
        num_bits += count(&amp;quot;./&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;number of bits is : {num_bits}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 4 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2022-06-22 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
==== rx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void received_string(int signo, siginfo_t *info, void *context){&lt;br /&gt;
    long msg_long = (long)info-&amp;gt;si_value.sival_ptr;&lt;br /&gt;
    if(msg_long == 0)&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    else{&lt;br /&gt;
        char msg;&lt;br /&gt;
        for(int i=0, last = 0; i&amp;lt;8; i++){&lt;br /&gt;
            last = msg_long%256;&lt;br /&gt;
            msg_long = msg_long&amp;gt;&amp;gt;8;&lt;br /&gt;
            printf(&amp;quot;%c&amp;quot;, last);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    union sigval v;&lt;br /&gt;
    sigqueue(info-&amp;gt;si_pid, SIGUSR1, v);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, getpid());&lt;br /&gt;
    struct sigaction act;&lt;br /&gt;
    act.sa_sigaction = received_string;&lt;br /&gt;
    act.sa_flags = SA_SIGINFO;&lt;br /&gt;
    sigaction(SIGUSR1, &amp;amp;act, NULL);&lt;br /&gt;
    while(1)&lt;br /&gt;
        sleep(20);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    if(argc&amp;lt;3)&lt;br /&gt;
        exit(EXIT_FAILURE);&lt;br /&gt;
    int rxpid = atoi(argv[1]),&lt;br /&gt;
        base = 0,&lt;br /&gt;
        i,&lt;br /&gt;
        retsig;&lt;br /&gt;
    long msg;&lt;br /&gt;
    union sigval val;&lt;br /&gt;
&lt;br /&gt;
    sigset_t ret_set;&lt;br /&gt;
    sigemptyset(&amp;amp;ret_set);&lt;br /&gt;
    sigaddset(&amp;amp;ret_set, SIGUSR1);&lt;br /&gt;
    sigprocmask(SIG_BLOCK, &amp;amp;ret_set, NULL);&lt;br /&gt;
    do{&lt;br /&gt;
        msg = 0;&lt;br /&gt;
        for(i=base; i&amp;lt;base+8&amp;amp;&amp;amp;argv[2][i]!=0; i++)&lt;br /&gt;
            msg += (long)argv[2][i]&amp;lt;&amp;lt;8*(i%8);&lt;br /&gt;
        val.sival_ptr = (void*)msg;&lt;br /&gt;
        sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
        sigwait(&amp;amp;ret_set, &amp;amp;retsig);&lt;br /&gt;
        base+=8;&lt;br /&gt;
    }while(argv[2][i]!=0);&lt;br /&gt;
    val.sival_ptr = 0;&lt;br /&gt;
    sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Keks</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2958</id>
		<title>Prove pratiche 2022</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Prove_pratiche_2022&amp;diff=2958"/>
		<updated>2023-04-01T14:50:48Z</updated>

		<summary type="html">&lt;p&gt;Keks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= 2022-09-07 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da controllare, 09/03/2023&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/wait.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *const argv[]) {&lt;br /&gt;
    if (argc &amp;lt; 2) {&lt;br /&gt;
        fprintf(stderr, &amp;quot;Non ci sono abbastanza parametri per lo script\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        int wstatus;&lt;br /&gt;
        if (fork()) {&lt;br /&gt;
            execvp(argv[1], argv + 1);&lt;br /&gt;
        } else {&lt;br /&gt;
            wait(&amp;amp;wstatus);&lt;br /&gt;
            int status = WEXITSTATUS(wstatus);&lt;br /&gt;
            printf(&amp;quot;return value ***************** %d\n&amp;quot;, status);&lt;br /&gt;
            if (status != 0) {&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 3 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
Da contorllare [[User:Flecart|Flecart]] ([[User talk:Flecart|talk]]) 14:52, 9 March 2023 (CET)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import stat&lt;br /&gt;
&lt;br /&gt;
def is_elf(file):&lt;br /&gt;
    with open(file, &amp;quot;rb&amp;quot;) as f:&lt;br /&gt;
        magic = f.read()[:4]&lt;br /&gt;
        if magic == b'\x7fELF':&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def count(dir):&lt;br /&gt;
    if not os.path.isdir(dir):&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    num_bits = 0 &lt;br /&gt;
    for root, dir, files in os.walk(dir):&lt;br /&gt;
        for file in files:&lt;br /&gt;
            end_path = os.path.join(root, file)&lt;br /&gt;
            if is_elf(end_path):&lt;br /&gt;
                num_bits += os.lstat(end_path).st_size&lt;br /&gt;
&lt;br /&gt;
        break; # per non andare in altre directory&lt;br /&gt;
&lt;br /&gt;
    return num_bits&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    num_args = len(sys.argv);&lt;br /&gt;
    &lt;br /&gt;
    num_bits = 0&lt;br /&gt;
    for i in range(1, num_args):&lt;br /&gt;
        num_bits += count(sys.argv[i]) &lt;br /&gt;
&lt;br /&gt;
    if num_args == 1:&lt;br /&gt;
        num_bits += count(&amp;quot;./&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;number of bits is : {num_bits}&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Esercizio 4 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= 2022-06-22 =&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&lt;br /&gt;
=== Proposta 1 ===&lt;br /&gt;
&lt;br /&gt;
==== rx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void received_string(int signo, siginfo_t *info, void *context){&lt;br /&gt;
    long msg_long = (long)info-&amp;gt;si_value.sival_ptr;&lt;br /&gt;
    if(msg_long == 0)&lt;br /&gt;
        printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    else{&lt;br /&gt;
        char msg;&lt;br /&gt;
        for(int i=0, last = 0; i&amp;lt;8; i++){&lt;br /&gt;
            last = msg_long%256;&lt;br /&gt;
            msg_long = msg_long&amp;gt;&amp;gt;8;&lt;br /&gt;
            printf(&amp;quot;%c&amp;quot;, last);&lt;br /&gt;
        }&lt;br /&gt;
        fflush(stdout);&lt;br /&gt;
    }&lt;br /&gt;
    union sigval v;&lt;br /&gt;
    sigqueue(info-&amp;gt;si_pid, SIGUSR1, v);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, getpid());&lt;br /&gt;
    struct sigaction act;&lt;br /&gt;
    act.sa_sigaction = received_string;&lt;br /&gt;
    act.sa_flags = SA_SIGINFO;&lt;br /&gt;
    sigaction(SIGUSR1, &amp;amp;act, NULL);&lt;br /&gt;
    while(1)&lt;br /&gt;
        sleep(20);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== tx ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;signal.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
    if(argc&amp;lt;3)&lt;br /&gt;
        exit(EXIT_FAILURE);&lt;br /&gt;
    int rxpid = atoi(argv[1]),&lt;br /&gt;
        base = 0,&lt;br /&gt;
        i,&lt;br /&gt;
        retsig;&lt;br /&gt;
    long msg;&lt;br /&gt;
    union sigval val;&lt;br /&gt;
&lt;br /&gt;
    sigset_t ret_set;&lt;br /&gt;
    sigemptyset(&amp;amp;ret_set);&lt;br /&gt;
    sigaddset(&amp;amp;ret_set, SIGUSR1);&lt;br /&gt;
    sigprocmask(SIG_BLOCK, &amp;amp;ret_set, NULL);&lt;br /&gt;
    do{&lt;br /&gt;
        msg = 0;&lt;br /&gt;
        for(i=base; i&amp;lt;base+8&amp;amp;&amp;amp;argv[2][i]!=0; i++)&lt;br /&gt;
            msg += (long)argv[2][i]&amp;lt;&amp;lt;8*(i%8);&lt;br /&gt;
        val.sival_ptr = (void*)msg;&lt;br /&gt;
        sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
        sigwait(&amp;amp;ret_set, &amp;amp;retsig);&lt;br /&gt;
        base+=8;&lt;br /&gt;
    }while(argv[2][i]!=0);&lt;br /&gt;
    val.sival_ptr = 0;&lt;br /&gt;
    sigqueue(rxpid, SIGUSR1, val);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Keks</name></author>
	</entry>
</feed>