24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

312 volume VI os16<br />

Sorgenti della libreria generale 313<br />

«<br />

2390029 | {<br />

2390030 | return (NULL);<br />

2390031 | }<br />

2390032 | //<br />

2390033 | pw.pw_name = strtok (buffer, ":");<br />

2390034 | pw.pw_passwd = strtok (NULL, ":");<br />

2390035 | char_uid = strtok (NULL, ":");<br />

2390036 | char_gid = strtok (NULL, ":");<br />

2390037 | pw.pw_gecos = strtok (NULL, ":");<br />

2390038 | pw.pw_dir = strtok (NULL, ":");<br />

2390039 | pw.pw_shell = strtok (NULL, ":");<br />

2390040 | pw.pw_uid = (uid_t) atoi (char_uid);<br />

2390041 | pw.pw_gid = (gid_t) atoi (char_gid);<br />

2390042 | //<br />

2390043 | return (&pw);<br />

2390044 |}<br />

2390045 |//----------------------------------------------------------------------<br />

2390046 |void<br />

2390047 |endpwent (void)<br />

2390048 |{<br />

2390049 | int status;<br />

2390050 | //<br />

2390051 | if (fp != NULL)<br />

2390052 | {<br />

2390053 | fclose (fp);<br />

2390054 | if (status != NULL)<br />

2390055 | {<br />

2390056 | fp = NULL;<br />

2390057 | }<br />

2390058 | }<br />

2390059 |}<br />

2390060 |//----------------------------------------------------------------------<br />

2390061 |void<br />

2390062 |setpwent (void)<br />

2390063 |{<br />

2390064 | if (fp != NULL)<br />

2390065 | {<br />

2390066 | rewind (fp);<br />

2390067 | }<br />

2390068 |}<br />

2390069 |//----------------------------------------------------------------------<br />

2390070 |struct passwd *<br />

2390071 |getpwnam (const char *name)<br />

2390072 |{<br />

2390073 | struct passwd *pw;<br />

2390074 | //<br />

2390075 | setpwent ();<br />

2390076 | //<br />

2390077 | for (;;)<br />

2390078 | {<br />

2390079 | pw = getpwent ();<br />

2390080 | if (pw == NULL)<br />

2390081 | {<br />

2390082 | return (NULL);<br />

2390083 | }<br />

2390084 | if (strcmp (pw->pw_name, name) == 0)<br />

2390085 | {<br />

2390086 | return (pw);<br />

2390087 | }<br />

2390088 | }<br />

2390089 |}<br />

2390090 |//----------------------------------------------------------------------<br />

2390091 |struct passwd *<br />

2390092 |getpwuid (uid_t uid)<br />

2390093 |{<br />

2390094 | struct passwd *pw;<br />

2390095 | //<br />

2390096 | setpwent ();<br />

2390097 | //<br />

2390098 | for (;;)<br />

2390099 | {<br />

2390100 | pw = getpwent ();<br />

2390101 | if (pw == NULL)<br />

2390102 | {<br />

2390103 | return (NULL);<br />

2390104 | }<br />

2390105 | if (pw->pw_uid == uid)<br />

2390106 | {<br />

2390107 | return (pw);<br />

2390108 | }<br />

2390109 | }<br />

2390110 |}<br />

105.8 os16: «lib/signal.h»<br />

Si veda la sezione 101.2.<br />

2400001 |#ifndef _SIGNAL_H<br />

2400002 |#define _SIGNAL_H 1<br />

2400003 |<br />

2400004 |#include <br />

2400005 |//----------------------------------------------------------------------<br />

2400006 |#define SIGHUP 1<br />

2400007 |#define SIGINT 2<br />

2400008 |#define SIGQUIT 3<br />

2400009 |#define SIGILL 4<br />

2400010 |#define SIGABRT 6<br />

2400011 |#define SIGFPE 8<br />

2400012 |#define SIGKILL 9<br />

2400013 |#define SIGSEGV 11<br />

2400014 |#define SIGPIPE 13<br />

2400015 |#define SIGALRM 14<br />

2400016 |#define SIGTERM 15<br />

2400017 |#define SIGSTOP 17<br />

2400018 |#define SIGTSTP 18<br />

2400019 |#define SIGCONT 19<br />

2400020 |#define SIGCHLD 20<br />

2400021 |#define SIGTTIN 21<br />

2400022 |#define SIGTTOU 22<br />

2400023 |#define SIGUSR1 30<br />

2400024 |#define SIGUSR2 31<br />

2400025 |//----------------------------------------------------------------------<br />

2400026 |typedef int sig_atomic_t;<br />

2400027 |typedef void (*sighandler_t) (int); // The type ‘sighandler_t’ is a<br />

2400028 | // pointer to a function for the<br />

2400029 | // signal handling, with a parameter<br />

2400030 | // of type ‘int’, returning ‘void’.<br />

2400031 |//<br />

2400032 |// Special undeclarable functions.<br />

2400033 |//<br />

2400034 |#define SIG_ERR ((sighandler_t) -1) // It transform an integer number<br />

2400035 |#define SIG_DFL ((sighandler_t) 0) // into a ‘sighandler_t’ type,<br />

2400036 |#define SIG_IGN ((sighandler_t) 1) // that is, a pointer to a function<br />

2400037 | // that does not exists really.<br />

2400038 |//----------------------------------------------------------------------<br />

2400039 |sighandler_t signal (int sig, sighandler_t handler);<br />

2400040 |int kill (pid_t pid, int sig);<br />

2400041 |int raise (int sig);<br />

2400042 |//----------------------------------------------------------------------<br />

2400043 |<br />

2400044 |#endif<br />

105.8.1 lib/signal/kill.c<br />

Si veda la sezione 97.22.<br />

2410001 |#include <br />

2410002 |#include <br />

2410003 |#include <br />

2410004 |#include <br />

2410005 |#include <br />

2410006 |//----------------------------------------------------------------------<br />

2410007 |int<br />

2410008 |kill (pid_t pid, int sig)<br />

2410009 |{<br />

2410010 | sysmsg_kill_t msg;<br />

2410011 | if (pid < -1) // Currently unsupported.<br />

2410012 | {<br />

2410013 | errset (ESRCH);<br />

2410014 | return (-1);<br />

2410015 | }<br />

2410016 | msg.pid = pid;<br />

2410017 | msg.signal = sig;<br />

2410018 | msg.ret = 0;<br />

2410019 | msg.errno = 0;<br />

2410020 | sys (SYS_KILL, &msg, (sizeof msg));<br />

2410021 | errno = msg.errno;<br />

2410022 | errln = msg.errln;<br />

2410023 | strncpy (errfn, msg.errfn, PATH_MAX);<br />

2410024 | return (msg.ret);<br />

2410025 |}<br />

105.8.2 lib/signal/signal.c<br />

Si veda la sezione 97.34.<br />

2420001 |#include <br />

2420002 |#include <br />

2420003 |#include <br />

2420004 |#include <br />

2420005 |#include <br />

2420006 |//----------------------------------------------------------------------<br />

2420007 |sighandler_t<br />

2420008 |signal (int sig, sighandler_t handler)<br />

2420009 |{<br />

2420010 | sysmsg_signal_t msg;<br />

2420011 |<br />

2420012 | msg.signal = sig;<br />

2420013 | msg.handler = handler;<br />

2420014 | msg.ret = SIG_DFL;<br />

2420015 | msg.errno = 0;<br />

2420016 | sys (SYS_SIGNAL, &msg, (sizeof msg));<br />

2420017 | errno = msg.errno;<br />

2420018 | errln = msg.errln;<br />

2420019 | strncpy (errfn, msg.errfn, PATH_MAX);<br />

2420020 | return (msg.ret);<br />

2420021 |}<br />

105.9 os16: «lib/stdio.h»<br />

Si veda la sezione 98.103.<br />

2430001 |#ifndef _STDIO_H<br />

2430002 |#define _STDIO_H 1<br />

2430003 |<br />

2430004 |#include <br />

2430005 |#include <br />

2430006 |#include <br />

2430007 |#include <br />

2430008 |#include <br />

2430009 |#include <br />

2430010 |#include <br />

2430011 |#include <br />

2430012 |#include // SEEK_CUR, SEEK_SET, SEEK_END<br />

2430013 |//----------------------------------------------------------------------<br />

2430014 |#define BUFSIZ 2048 // Like the file system max zone<br />

2430015 | // size.<br />

2430016 |#define _IOFBF 0 // Input-output fully buffered.<br />

2430017 |#define _IOLBF 1 // Input-output line buffered.<br />

2430018 |#define _IONBF 2 // Input-output with no buffering.<br />

2430019 |<br />

2430020 |#define L_tmpnam FILENAME_MAX // <br />

2430021 |<br />

2430022 |#define FOPEN_MAX OPEN_MAX // <br />

2430023 |#define FILENAME_MAX NAME_MAX // <br />

2430024 |#define TMP_MAX 0x7FFF<br />

2430025 |<br />

2430026 |#define EOF (-1) // Must be a negative value.<br />

2430027 |//----------------------------------------------------------------------<br />

2430028 |typedef off_t fpos_t; // ‘off_t’ defined in .<br />

2430029 |<br />

2430030 |typedef struct {<br />

2430031 | int fdn; // File descriptor number.<br />

2430032 | char error; // Error indicator.<br />

2430033 | char eof; // End of file indicator.<br />

2430034 |} FILE;<br />

2430035 |<br />

2430036 |extern FILE _stream[]; // Defined inside ‘lib/stdio/FILE.c’.<br />

«<br />

«<br />

«

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!