System Functions
Emulate System Library Functions
Serveral built-in functions enable you to execute various system library calls from within you Perl program, each one corresponds to a Unix system library function. To get more help on these functions use the Unix man pages.
getgrent, setgrent, endgrent | getgrent - enables to retrieve an item from the user group file (/etc/group) setgrent - tells the interpreter to rewind the /etc/group file to the beginning and keep it open endgrent - tells perl thast you no longer need access to the /etc/group file |
getgrnam | retrieve the group file entry corresponding to a particular group name |
getgrid | retrieve the group file entry corresponding to a particular group ID |
getnetent | enables you to step through the /etc/services file |
getnetgyaddr | enables you to retrieve the line of input from the /etc/networks that matches a particular network number |
getnetbyname | enables you to retrieve the line of input from the /etc/networks that matches a particular network name |
setnetent,endnetent | setnetent - tells the interpreter to rewind the /etc/networks file to the beginning and keep it open endnetent - tells perl thast you no longer need access to the /etc/networks file |
gethostbyaddr | searches the /etc/hosts file for the host name corresponding to a particular IP address |
gethostbyname | searches the /etc/hosts file for the host name corresponding to a particular Server name |
gethostent, sethostent, endhostent | gethostent - enables you to read each item of the /etc/hosts file in turn sethostent - tells the interpreter to rewind the /etc/hosts file to the beginning and keep it open endhostent - tells perl thast you no longer need access to the /etc/hosts file |
getlogin | returns the user ID under which you are logged in. |
getpgrp, setpgrp | getpgrp - retrieves the process group ID for a particular process setpgrp - sets the process group ID for a particular process |
getppid | retrieve the parent process ID of your program, can be used with fork |
getpwname | enables you to retrieve the password entry in /etc/passwd for a particular user name |
getpwuid | enables you to retrieve the password entry in /etc/passwd for a particular user ID |
getpwent, setpwent, endpwent | getpwent - enable you to retrieve a single entry from the password file setpwent - tells the interpreter to rewind the /etc/passwd file to the beginning and keep it open endpwent - tells perl thast you no longer need access to the /etc/passwd file |
getpriority, setpriority | getpriority - retrieves the current priority for a process setpriority - change the current priority of a process |
getprotoent | enables you to search for a particular protocol in the /etc/protocols files |
getprotobyname | enables you to search for a particular protocol in the /etc/protocols files using a name |
getprotobynumber | enables you to search for a particular protocol in the /etc/protocols files using a number |
setprotoent, endprotoent | setprotoent - tells the interpreter to rewind the /etc/protocols file to the beginning and keep it open endprotoent - tells perl thast you no longer need access to the /etc/protocols file |
getservent | enables you to search for a particular service in the /etc/services files |
getservbyname, getsrvbyport | getservbyname - enables you to search for a particular service in the /etc/services files by service name getservbyport - enables you to search for a particular service in the /etc/services files by service port number |
setservent, endservent | setservent - tells the interpreter to rewind the /etc/services file to the beginning and keep it open endservent - tells perl thast you no longer need access to the /etc/services file |
chroot | enables you to specify the root directory for your program and any subprocesses that it creates |
ioctl | enables you to set system-dependent file attributes |
alarm | ends a special "alarm" signal SIGALARM to your prgram |
select | enables you to call the Unix select (not the Perl select statement) |
dump | generate a Unix core dump from within your program |
Examples |
|
getgrent, setgrent, endgrent | ## getgrent ## endgrent |
getgrnam | $group_name = 'root' ($name,$passwd,$gid,$members) = getgrnam($group_name); |
getgrid | $group_id = 0; ($name,$passwd,$gid,$members) = getgrid($group_id); |
getnetent | ($name, $altnames, $addrtype, $rawaddr) = getnetent(); |
getnetgyaddr | @addrbytes = (192,168,0,1); Note: the address passed to getnetbyaddr must be a packed 4 byte integer, see pack for more information regarding packing |
getnetbyname | ($name, $altnames, $addrtype, $addr) = getnetbyaddr($server_name); |
setnetent,endnetent | setnetent(<keepopen>); ## keep open the networks file after getnetbyaddr or getnetbyname is endnetent; ## clode the /etc/networks file |
gethostbyaddr | @addrbytes = (192,168,0,1); $packedaddr = pack("C4", @addrbytes); ($name, $altnames, $addrtype, $len $addr) = gethostbyaddr($packedaddr, AF_NET); |
gethostbyname | ($name, $altnames, $addrtype, $len $addr) = gethostbyaddr($server_name); |
gethostent, sethostent, endhostent | ## gethostent ## sethostent |
getlogin | $user_ID = getlogin(); |
getpgrp, setpgrp | ## getpgrp ## setpgrp |
getppid | $parent_PID = getppid(); |
getpwname | ($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwnam("root"); print "Name = $name\n"; print "Password = $passwd\n"; print "UID = $uid\n"; print "GID = $gid\n"; print "Quota = $quota\n"; print "Comment = $comment\n"; print "Gcos = $gcos\n"; print "HOME DIR = $dir\n"; print "Shell = $shell\n"; |
getpwuid | ($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell) = getpwnam(0); |
getpwent, setpwent, endpwent | ## getpwent ## setpwent ## endpwent |
getpriority, setpriority | ## getpriority ## setpriority |
getprotoent | ($name, $alias, $number) = getprotoent(); |
getprotobyname | ($name, $alias, $number) = getprotoent(<search_name>); |
getprotobynumber | ($name, $alias, $number) = getprotoent(<search_number>); |
setprotoent, endprotoent | ## setprotoent ## endprotoent |
getservent | ($name, $aliases, $portnum, $protoname) = getservent(); |
getservbyname, getsrvbyport | ## getservbyname ## getservbyport |
setservent, endservent | ## setservent ## endservent |
chroot | chroot("/export/home/pvalle"); |
ioctl | ioctl(<filevar>,<attribute>,<value>); |
alarm | alarm(30); ## time is in seconds |
select | select (<rmask>,<wmask>,<emask>,<timeout>); |
dump | dump(); |
socket | defines a socket and associates it with a file variable |
bind | bind the socket to a particular port |
listen | this waits for connections to be established with it. |
accept | have the process call accept the connection. |
connect | this connects to a port that is listening and accepting connections |
shutdown | enables you to indicate that traffic in one or both directions i no longer needed |
socketpair | creates a pair of sockets instead of just one |
getsockopt, setsockopt | obtain and set socket options |
getsockname, getpeername | enables you to retrieve the addresses of the two ends of a socket connection |
Examples |
|
socket, bind, listen, accept | ## A simple server program $port = 8888; while (getservbyport ($port, "tcp")) { ($d1, $d2, $prototype) = getprotobyname("tcp"); $serveraddr = pack("Sna4x8", 2, $port, $rawserver); socket (SSOCKET, 2, 1, $protoype) || die("ERROR: unable to open socket\n"); ($clientaddr = accept (SOCKET, SSOCKET)) || die("ERROR: unable to accept\n"); select(SOCKET); |
connect | ## A simple client program while (getservbyport ($port, "tcp")) { ($d1, $d2, $prototype) = getprotobyname("tcp"); $clientaddr = pack("Sna4x8", 2, $port, $rawclient); socket (SOCKET, 2, 1, $protoype) || die("ERROR: unable to open socket\n"); $line = <SOCKET>; |
shutdown | shutdown (SOCKET, <direction>); |
socketpair | socketpair(<socket1>,<socket2>,<domain>,<type>,format>); |
getsockopt, setsockopt | $retval = getsockopt(<socket>,<opttype>,<optname>); setsockopt(<socket>,<opttype>,<optname>); |
getsockname, getpeername | ## Local computer's socket address ## Remotes computer's socket address |
The below are processes that intercommunicate via IPC calls, they use the following insteade of sockets
A semaphore is a method of ensuring that only one process can run a particular segment of code or access a particular chunk of shared memory storage at any given time.
msgget | create a message queue ID to represent a particular message |
msgsnd | send a message to a message queue |
msgrcv | obtain a message from the queue |
msgctl | enable you to set options for message queues and send commands that affect them |
shmget | create the shared memeory |
shmwrite | to send data to a particular segment of shared memory |
shmread | to obtain data from a segment of shared ememory |
shmctl | enables you to set options for shared memory segments and send commands that affect them |
semget | create a semaphore |
semop | perform a semaphore option |
semctl | enables you to set options for semaphores |
Examples |
|
msgget | $msgid = msgget (<key>,<flag>); |
msgsnd | msgsnd(<msgid>,<message>,<flags>); |
msgrcv | msgrcv (<msgid>,<message>,<size>,<mesgtype>,<flags>); |
msgctl | msgctl (<msgid>,<msgcmd>,<msgarg>); |
shmget | $shmid = shmget (<key>,<size>,<flag>); |
shmwrite | shmwrite (<shmid>,<text>,<pos>,<size>); |
shmread | shmread (<shmid>,$retval,<pos>,<size>); ## $retval is the data returned |
shmctl | shmctl (<shmid>,<shmcmd>,<shmarg>); |
semget | $semid = semget (<key>,<num>,<flag>); |
semop | semop (<semid>,<semstructs>); ## semstructs is a character string consisting of an ## array of semphore structures |
semctl | semctl (<semid>,<semcmd>,<semarg>); |