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 />
«