[BACK]Return to posix.html CVS log [TXT][DIR] Up to [local] / prex / doc / html / doc

Annotation of prex/doc/html/doc/posix.html, Revision 1.1

1.1     ! nbrk        1: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        !             2: <html>
        !             3: <head>
        !             4:   <title>POSIX Compatibility</title>
        !             5:   <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
        !             6:   <meta name="keywords" content="Prex, embedded, real-time, operating system, RTOS, open source, free">
        !             7:   <meta name="author" content="Kohsuke Ohtani">
        !             8:   <link rel="stylesheet" type="text/css" href="../default.css" media="screen">
        !             9:   <link rel="stylesheet" type="text/css" href="../print.css" media="print">
        !            10: </head>
        !            11: <body>
        !            12: <div id="top">
        !            13: </div>
        !            14: <div id="middle">
        !            15: 
        !            16: <table id="content" cellpadding="0" cellspacing="0">
        !            17:   <tbody>
        !            18: 
        !            19:     <tr>
        !            20:       <td id="header" colspan="2" valign="top">
        !            21:         <table width="100%" border="0" cellspacing="0" cellpadding="0">
        !            22:         <tr>
        !            23:           <td id="logo">
        !            24:             <a href="http://prex.sourceforge.net/">
        !            25:             <img alt="Prex logo" src="../img/logo.gif" border="0"
        !            26:             style="width: 250px; height: 54px;"></a>
        !            27:           </td>
        !            28:           <td id="brief" align="right" valign="bottom">
        !            29:             An Open Source, Royalty-free,<br>
        !            30:            Real-time Operating System
        !            31:           </td>
        !            32:         </tr>
        !            33:         </table>
        !            34:       </td>
        !            35:     </tr>
        !            36: 
        !            37:     <tr>
        !            38:       <td id="directory" style="vertical-align: top;">
        !            39:       <a href="http://prex.sourceforge.net/">Prex Home</a> >
        !            40:       <a href="index.html">Document Index</a> >
        !            41:       POSIX Compatibility
        !            42:     </tr>
        !            43:     <tr><td class="pad" colspan="2" style="vertical-align: top;"></td></tr>
        !            44: 
        !            45:     <tr>
        !            46:       <td id="doc" style="vertical-align: top;">
        !            47:       <h1>POSIX Compatibility List</h1>
        !            48: 
        !            49: <i>Version 0.1 (Draft), 2007/08/07</i><br><br>
        !            50: 
        !            51: 
        !            52: <h3>File and Directories - &lt;unistd.h&gt;</h3>
        !            53: 
        !            54: <table border="1" cellspacing="0">
        !            55: <tbody>
        !            56: 
        !            57: <tr>
        !            58:   <th width="80">Name</th>
        !            59:   <th width="400">Synopsis</th>
        !            60:   <th>Description</th>
        !            61:   <th width="70">Support?</th>
        !            62: </tr>
        !            63: 
        !            64:   <tr>
        !            65:     <td>getcwd</td>
        !            66:     <td>char *getcwd(char *buf, size_t size);</td>
        !            67:     <td>get current working directory</td>
        !            68:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !            69:   </tr>
        !            70: 
        !            71:   <tr>
        !            72:     <td>mkdir</td>
        !            73:     <td>int mkdir(const char *pathname, mode_t mode);</td>
        !            74:     <td>create a directory</td>
        !            75:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !            76:   </tr>
        !            77: 
        !            78:   <tr>
        !            79:     <td>rmdir</td>
        !            80:     <td>int rmdir(const char *pathname);</td>
        !            81:     <td>delete a directory</td>
        !            82:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !            83:   </tr>
        !            84: 
        !            85:   <tr>
        !            86:     <td>chdir</td>
        !            87:     <td>int chdir(const char *path);</td>
        !            88:     <td>change working directory</td>
        !            89:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !            90:   </tr>
        !            91: 
        !            92:   <tr>
        !            93:     <td>link</td>
        !            94:     <td>int link(const char *oldpath, const char *newpath);</td>
        !            95:     <td>make a new name for a file</td>
        !            96:     <td>X</td>
        !            97:   </tr>
        !            98: 
        !            99:   <tr>
        !           100:     <td>unlink</td>
        !           101:     <td>int unlink(const char *pathname);</td>
        !           102:     <td>delete a name and possibly the file it refers to</td>
        !           103:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           104:   </tr>
        !           105: 
        !           106:   <tr>
        !           107:     <td>rename</td>
        !           108:     <td>int rename(const char *oldpath, const char *newpath);</td>
        !           109:     <td>change the name or location of a file</td>
        !           110:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           111:   </tr>
        !           112: 
        !           113:   <tr>
        !           114:     <td>stat</td>
        !           115:     <td>int stat(const char *file_name, struct stat *buf);</td>
        !           116:     <td>get file status</td>
        !           117:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           118:   </tr>
        !           119: 
        !           120:   <tr>
        !           121:     <td>chmod</td>
        !           122:     <td>int chmod(const char *path, mode_t mode);</td>
        !           123:     <td>change permissions of a file</td>
        !           124:     <td>No</td>
        !           125:   </tr>
        !           126: 
        !           127:   <tr>
        !           128:     <td>chown</td>
        !           129:     <td>int chown(const char *path, uid_t owner, gid_t group);</td>
        !           130:     <td>change ownership of a file</td>
        !           131:     <td>No</td>
        !           132:   </tr>
        !           133: 
        !           134:   <tr>
        !           135:     <td>utime</td>
        !           136:     <td>int utime(const char *filename, struct utimbuf *buf);</td>
        !           137:     <td>change access and/or modification times of an inode</td>
        !           138:     <td>X</td>
        !           139:   </tr>
        !           140: 
        !           141:   <tr>
        !           142:     <td>opendir</td>
        !           143:     <td>DIR *opendir(const char *name);</td>
        !           144:     <td>open a directory</td>
        !           145:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           146:   </tr>
        !           147: 
        !           148:   <tr>
        !           149:     <td>readdir</td>
        !           150:     <td>struct dirent *readdir(DIR *dir);</td>
        !           151:     <td>read directory entry</td>
        !           152:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           153:   </tr>
        !           154: 
        !           155:   <tr>
        !           156:     <td>closedir</td>
        !           157:     <td>int closedir(DIR *dir);</td>
        !           158:     <td>close a directory</td>
        !           159:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           160:   </tr>
        !           161: 
        !           162:   <tr>
        !           163:     <td>rewinddir</td>
        !           164:     <td>void rewinddir(DIR *dir);</td>
        !           165:     <td>reset directory stream</td>
        !           166:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           167:   </tr>
        !           168: 
        !           169: </tbody>
        !           170: </table>
        !           171: 
        !           172: 
        !           173: <h3>Advanced File Operations - &lt;unistd.h&gt;</h3>
        !           174: 
        !           175: <table border="1" cellspacing="0">
        !           176: <tbody>
        !           177: 
        !           178: <tr>
        !           179:   <th width="80">Name</th>
        !           180:   <th width="400">Synopsis</th>
        !           181:   <th>Description</th>
        !           182:   <th width="70">Support?</th>
        !           183: </tr>
        !           184: 
        !           185: 
        !           186:   <tr>
        !           187:     <td>access</td>
        !           188:     <td>int access(const char *pathname, int mode);</td>
        !           189:     <td>check user's permissions for a file</td>
        !           190:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           191:   </tr>
        !           192: 
        !           193:   <tr>
        !           194:     <td>open</td>
        !           195:     <td>int open(const char *pathname, int flags);</td>
        !           196:     <td>open and possibly create a file or device</td>
        !           197:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           198:   </tr>
        !           199: 
        !           200:   <tr>
        !           201:     <td>creat</td>
        !           202:     <td>int creat(const char *pathname, mode_t mode);</td>
        !           203:     <td>open and possibly create a file or device</td>
        !           204:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           205:   </tr>
        !           206: 
        !           207:   <tr>
        !           208:     <td>close</td>
        !           209:     <td>int close(int fd);</td>
        !           210:     <td>close a file descriptor</td>
        !           211:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           212:   </tr>
        !           213: 
        !           214:   <tr>
        !           215:     <td>read</td>
        !           216:     <td>ssize_t read(int fd, void *buf, size_t count);</td>
        !           217:     <td>read from a file descriptor</td>
        !           218:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           219:   </tr>
        !           220: 
        !           221:   <tr>
        !           222:     <td>write</td>
        !           223:     <td>ssize_t write(int fd, const void *buf, size_t count);</td>
        !           224:     <td>write to a file descriptor</td>
        !           225:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           226:   </tr>
        !           227: 
        !           228:   <tr>
        !           229:     <td>fcntl</td>
        !           230:     <td>int fcntl(int fd, int cmd);</td>
        !           231:     <td>manipulate file descriptor</td>
        !           232:     <td>X</td>
        !           233:   </tr>
        !           234: 
        !           235:   <tr>
        !           236:     <td>fstat</td>
        !           237:     <td>int fstat(int filedes, struct stat *buf);</td>
        !           238:     <td>get file status</td>
        !           239:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           240:   </tr>
        !           241: 
        !           242:   <tr>
        !           243:     <td>lseek</td>
        !           244:     <td>off_t lseek(int fildes, off_t offset, int whence);</td>
        !           245:     <td>reposition read/write file offset</td>
        !           246:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           247:   </tr>
        !           248: 
        !           249:   <tr>
        !           250:     <td>dup</td>
        !           251:     <td>int dup(int oldfd);</td>
        !           252:     <td>duplicate a file descriptor</td>
        !           253:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           254:   </tr>
        !           255: 
        !           256:   <tr>
        !           257:     <td>dup2</td>
        !           258:     <td>int dup2(int oldfd, int newfd);</td>
        !           259:     <td>duplicate a file descriptor</td>
        !           260:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           261:   </tr>
        !           262: 
        !           263:   <tr>
        !           264:     <td>pipe</td>
        !           265:     <td>int pipe(int filedes[2]);</td>
        !           266:     <td>create pipe</td>
        !           267:     <td>X</td>
        !           268:   </tr>
        !           269: 
        !           270:   <tr>
        !           271:     <td>mkfifo</td>
        !           272:     <td>int mkfifo(const char *pathname, mode_t mode);</td>
        !           273:     <td>make a FIFO special file (a named pipe)</td>
        !           274:     <td>X</td>
        !           275:   </tr>
        !           276: 
        !           277:   <tr>
        !           278:     <td>umask</td>
        !           279:     <td>mode_t umask(mode_t mask);</td>
        !           280:     <td>set file creation mask</td>
        !           281:     <td>Not Support</td>
        !           282:   </tr>
        !           283: 
        !           284:   <tr>
        !           285:     <td>fdopen</td>
        !           286:     <td>FILE *fdopen(int fildes, const char *mode);</td>
        !           287:     <td>associate a stream with an existing file descriptor</td>
        !           288:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           289:   </tr>
        !           290: 
        !           291:   <tr>
        !           292:     <td>fileno</td>
        !           293:     <td>int fileno(FILE *stream);</td>
        !           294:     <td>return file descriptor of stream</td>
        !           295:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           296:   </tr>
        !           297: 
        !           298: </tbody>
        !           299: </table>
        !           300: 
        !           301: 
        !           302: <h3>Processes - &lt;unistd.h&gt;</h3>
        !           303: 
        !           304: <table border="1" cellspacing="0">
        !           305: <tbody>
        !           306: 
        !           307: <tr>
        !           308:   <th width="80">Name</th>
        !           309:   <th width="400">Synopsis</th>
        !           310:   <th>Description</th>
        !           311:   <th width="70">Support?</th>
        !           312: </tr>
        !           313: 
        !           314: 
        !           315:   <tr>
        !           316:     <td>fork</td>
        !           317:     <td>pid_t fork(void);</td>
        !           318:     <td>create a child process</td>
        !           319:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           320:   </tr>
        !           321: 
        !           322:   <tr>
        !           323:     <td>execl</td>
        !           324:     <td>int execl(const char *path, const char *arg, ...);</td>
        !           325:     <td>execute a file</td>
        !           326:     <td>X</td>
        !           327:   </tr>
        !           328: 
        !           329:   <tr>
        !           330:     <td>execle</td>
        !           331:     <td>int execle(const char *path, const char *arg, ...)</td>
        !           332:     <td>execute a file</td>
        !           333:     <td>X</td>
        !           334:   </tr>
        !           335: 
        !           336:   <tr>
        !           337:     <td>execlp</td>
        !           338:     <td>int execlp(const char *file, const char *arg, ...);</td>
        !           339:     <td>execute a file</td>
        !           340:     <td>X</td>
        !           341:   </tr>
        !           342: 
        !           343:   <tr>
        !           344:     <td>execv</td>
        !           345:     <td>int execv(const char *path, char *const argv[]);</td>
        !           346:     <td>execute a file</td>
        !           347:     <td>X</td>
        !           348:   </tr>
        !           349: 
        !           350:   <tr>
        !           351:     <td>execve</td>
        !           352:     <td>int execve(const char *path, char *const argv[], char *const envp[]))</td>
        !           353:     <td>execute program</td>
        !           354:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           355:   </tr>
        !           356: 
        !           357:   <tr>
        !           358:     <td>execvp</td>
        !           359:     <td>int execvp(const char *file, char *const argv[]);</td>
        !           360:     <td>execute a file</td>
        !           361:     <td>X</td>
        !           362:   </tr>
        !           363: 
        !           364:   <tr>
        !           365:     <td>wait</td>
        !           366:     <td>pid_t wait(int *status);</td>
        !           367:     <td>wait for process termination</td>
        !           368:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           369:   </tr>
        !           370: 
        !           371:   <tr>
        !           372:     <td>waitpid</td>
        !           373:     <td>pid_t waitpid(pid_t pid, int *status, int options);</td>
        !           374:     <td>wait for process termination</td>
        !           375:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           376:   </tr>
        !           377: 
        !           378:   <tr>
        !           379:     <td>_exit</td>
        !           380:     <td>void _exit(int status);</td>
        !           381:     <td>terminate the current process</td>
        !           382:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           383:   </tr>
        !           384: 
        !           385:   <tr>
        !           386:     <td>kill</td>
        !           387:     <td>int kill(pid_t pid, int sig);</td>
        !           388:     <td>send signal to a process</td>
        !           389:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           390:   </tr>
        !           391: 
        !           392:   <tr>
        !           393:     <td>sleep</td>
        !           394:     <td>unsigned int sleep(unsigned int seconds);</td>
        !           395:     <td>Sleep for the specified number of seconds</td>
        !           396:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           397:   </tr>
        !           398: 
        !           399:   <tr>
        !           400:     <td>pause</td>
        !           401:     <td>int pause(void);</td>
        !           402:     <td>wait for signal</td>
        !           403:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           404:   </tr>
        !           405: 
        !           406:   <tr>
        !           407:     <td>alarm</td>
        !           408:     <td>unsigned int alarm(unsigned int seconds);</td>
        !           409:     <td>set an alarm clock for delivery of a signal</td>
        !           410:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           411:   </tr>
        !           412: 
        !           413:   <tr>
        !           414:     <td>setuid</td>
        !           415:     <td>int setuid(uid_t uid);</td>
        !           416:     <td>set user identity</td>
        !           417:     <td>Limited Support</td>
        !           418:   </tr>
        !           419: 
        !           420:   <tr>
        !           421:     <td>setgid</td>
        !           422:     <td>int setgid(gid_t gid);</td>
        !           423:     <td>set group identity</td>
        !           424:     <td>Limited Support</td>
        !           425:   </tr>
        !           426: 
        !           427: </tbody>
        !           428: </table>
        !           429: 
        !           430: 
        !           431: <h3>Long Jumps - &lt;setjmp.h&gt;</h3>
        !           432: 
        !           433: <table border="1" cellspacing="0">
        !           434: <tbody>
        !           435: 
        !           436: 
        !           437: <tr>
        !           438:   <th width="80">Name</th>
        !           439:   <th width="400">Synopsis</th>
        !           440:   <th>Description</th>
        !           441:   <th width="70">Support?</th>
        !           442: </tr>
        !           443: 
        !           444:   <tr>
        !           445:     <td>setjmp</td>
        !           446:     <td>int setjmp(jmp_buf env);</td>
        !           447:     <td>save stack context for non-local goto</td>
        !           448:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           449:   </tr>
        !           450: 
        !           451:   <tr>
        !           452:     <td>sigsetjmp</td>
        !           453:     <td>int sigsetjmp(sigjmp_buf env, int savesigs);</td>
        !           454:     <td>save stack context for non-local goto</td>
        !           455:     <td>X</td>
        !           456:   </tr>
        !           457: 
        !           458:   <tr>
        !           459:     <td>longjmp</td>
        !           460:     <td>void longjmp(jmp_buf env, int val);</td>
        !           461:     <td>non-local jump to a saved stack context</td>
        !           462:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           463:   </tr>
        !           464: 
        !           465:   <tr>
        !           466:     <td>siglongjmp</td>
        !           467:     <td>void siglongjmp(sigjmp_buf env, int val);</td>
        !           468:     <td>non-local jump to a saved stack context</td>
        !           469:     <td>X</td>
        !           470:   </tr>
        !           471: 
        !           472: </tbody>
        !           473: </table>
        !           474: 
        !           475: 
        !           476: <h3>Signal Handling - &lt;signal.h&gt;</h3>
        !           477: 
        !           478: <table border="1" cellspacing="0">
        !           479: <tbody>
        !           480: 
        !           481: 
        !           482: <tr>
        !           483:   <th width="80">Name</th>
        !           484:   <th width="400">Synopsis</th>
        !           485:   <th>Description</th>
        !           486:   <th width="70">Support?</th>
        !           487: </tr>
        !           488: 
        !           489: 
        !           490:   <tr>
        !           491:     <td>sigaction</td>
        !           492:     <td>int sigaction(int sig, const struct sigaction *act, struct sigaction *oldact);</td>
        !           493:     <td>examine and change signal action</td>
        !           494:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           495:   </tr>
        !           496: 
        !           497:   <tr>
        !           498:     <td>sigemptyset</td>
        !           499:     <td>int sigemptyset(sigset_t *set);</td>
        !           500:     <td>create an empty signal set</td>
        !           501:     <td>X</td>
        !           502:   </tr>
        !           503: 
        !           504:   <tr>
        !           505:     <td>sigfillset</td>
        !           506:     <td>int sigfillset(sigset_t *set);</td>
        !           507:     <td>create a full set of signals</td>
        !           508:     <td>X</td>
        !           509:   </tr>
        !           510: 
        !           511:   <tr>
        !           512:     <td>sigaddset</td>
        !           513:     <td>int sigaddset(sigset_t *set, int signum);</td>
        !           514:     <td>add a signal to a signal set</td>
        !           515:     <td>X</td>
        !           516:   </tr>
        !           517: 
        !           518:   <tr>
        !           519:     <td>sigdelset</td>
        !           520:     <td>int sigdelset(sigset_t *set, int signum);</td>
        !           521:     <td>remove a signal from a signal set</td>
        !           522:     <td>X</td>
        !           523:   </tr>
        !           524: 
        !           525:   <tr>
        !           526:     <td>sigismember</td>
        !           527:     <td>int sigismember(const sigset_t *set, int signum);</td>
        !           528:     <td>test a signal set for a selected member</td>
        !           529:     <td>X</td>
        !           530:   </tr>
        !           531: 
        !           532:   <tr>
        !           533:     <td>sigprocmask</td>
        !           534:     <td>int sigprocmask(int how, const sigset_t *set, sigset_t *oset);</td>
        !           535:     <td>examine and change blocked signals</td>
        !           536:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           537:   </tr>
        !           538: 
        !           539:   <tr>
        !           540:     <td>sigpending</td>
        !           541:     <td>int sigpending(sigset_t *set);</td>
        !           542:     <td>examine pending signals</td>
        !           543:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           544:   </tr>
        !           545: 
        !           546:   <tr>
        !           547:     <td>sigsuspend</td>
        !           548:     <td>int sigsuspend(const sigset_t *mask);</td>
        !           549:     <td>wait for a signal </td>
        !           550:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           551:   </tr>
        !           552: 
        !           553: </tbody>
        !           554: </table>
        !           555: 
        !           556: 
        !           557: <h3>Obtaining Information at Runtime - &lt;unistd.h&gt;&lt;pwd.h&gt;&lt;grp.h&gt;</h3>
        !           558: 
        !           559: <table border="1" cellspacing="0">
        !           560: <tbody>
        !           561: 
        !           562: <tr>
        !           563:   <th width="80">Name</th>
        !           564:   <th width="400">Synopsis</th>
        !           565:   <th>Description</th>
        !           566:   <th width="70">Support?</th>
        !           567: </tr>
        !           568: 
        !           569: 
        !           570:   <tr>
        !           571:     <td>getpid</td>
        !           572:     <td>pid_t getpid(void);</td>
        !           573:     <td>get process identification</td>
        !           574:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           575:   </tr>
        !           576: 
        !           577:   <tr>
        !           578:     <td>getppid</td>
        !           579:     <td>pid_t getppid(void);</td>
        !           580:     <td>get parent process identification</td>
        !           581:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           582:   </tr>
        !           583: 
        !           584:   <tr>
        !           585:     <td>getlogin</td>
        !           586:     <td>char * getlogin(void);</td>
        !           587:     <td>get user name</td>
        !           588:     <td>X</td>
        !           589:   </tr>
        !           590: 
        !           591:   <tr>
        !           592:     <td>getuid</td>
        !           593:     <td>uid_t getuid(void);</td>
        !           594:     <td>get user identity</td>
        !           595:     <td>Limited Support</td>
        !           596:   </tr>
        !           597: 
        !           598:   <tr>
        !           599:     <td>geteuid</td>
        !           600:     <td>uid_t geteuid(void);</td>
        !           601:     <td>get effective user identity</td>
        !           602:     <td>Limited Support</td>
        !           603:   </tr>
        !           604: 
        !           605:   <tr>
        !           606:     <td>cuserrid</td>
        !           607:     <td>char * cuserid(char *string);</td>
        !           608:     <td>get user name</td>
        !           609:     <td>X</td>
        !           610:   </tr>
        !           611: 
        !           612:   <tr>
        !           613:     <td>getgid</td>
        !           614:     <td>gid_t getgid(void);</td>
        !           615:     <td>get group identity</td>
        !           616:     <td>Limited Support</td>
        !           617:   </tr>
        !           618: 
        !           619:   <tr>
        !           620:     <td>getegid</td>
        !           621:     <td>gid_t getegid(void);</td>
        !           622:     <td>get effective group identity</td>
        !           623:     <td>Limited Support</td>
        !           624:   </tr>
        !           625: 
        !           626:   <tr>
        !           627:     <td>getpwuid</td>
        !           628:     <td>struct passwd *getpwuid(uid_t uid);</td>
        !           629:     <td>get password file entry based on user id</td>
        !           630:     <td>X</td>
        !           631:   </tr>
        !           632: 
        !           633:   <tr>
        !           634:     <td>getpwnam</td>
        !           635:     <td>struct passwd *getpwnam(const char * name);</td>
        !           636:     <td>get password file entry based on user name</td>
        !           637:     <td>X</td>
        !           638:   </tr>
        !           639: 
        !           640:   <tr>
        !           641:     <td>getgrgid</td>
        !           642:     <td>struct group *getgrgid(gid_t gid);</td>
        !           643:     <td>get group file entry based on group id</td>
        !           644:     <td>X</td>
        !           645:   </tr>
        !           646: 
        !           647:   <tr>
        !           648:     <td>getgrnam</td>
        !           649:     <td>struct group *getgrnam(const char *name);</td>
        !           650:     <td>get group file entry baes on group name</td>
        !           651:     <td>X</td>
        !           652:   </tr>
        !           653: 
        !           654:   <tr>
        !           655:     <td>getgroups</td>
        !           656:     <td>int getgroups(int size, gid_t list[]);</td>
        !           657:     <td>get list of supplementary group IDs</td>
        !           658:     <td>X</td>
        !           659:   </tr>
        !           660: 
        !           661:   <tr>
        !           662:     <td>ctermid</td>
        !           663:     <td>char *ctermid(char *s);</td>
        !           664:     <td>get controlling terminal name</td>
        !           665:     <td>X</td>
        !           666:   </tr>
        !           667: 
        !           668:   <tr>
        !           669:     <td>uname</td>
        !           670:     <td>int uname(struct utsname *buf);</td>
        !           671:     <td>get name and information about current kernel</td>
        !           672:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           673:   </tr>
        !           674: 
        !           675:   <tr>
        !           676:     <td>getenv</td>
        !           677:     <td>char *getenv(const char *name);</td>
        !           678:     <td>get an environment variable</td>
        !           679:     <td>X</td>
        !           680:   </tr>
        !           681: 
        !           682:   <tr>
        !           683:     <td>sysconf</td>
        !           684:     <td>long sysconf(int name);</td>
        !           685:     <td>get configuration information at runtime</td>
        !           686:     <td>X</td>
        !           687:   </tr>
        !           688: 
        !           689:   <tr>
        !           690:     <td>fpathconf</td>
        !           691:     <td>long fpathconf(int filedes, int name);</td>
        !           692:     <td>get configuration values for files</td>
        !           693:     <td>X</td>
        !           694:   </tr>
        !           695: 
        !           696:   <tr>
        !           697:     <td>isatty</td>
        !           698:     <td>int isatty(int desc);</td>
        !           699:     <td>does this descriptor refer to a terminal</td>
        !           700:     <td>X</td>
        !           701:   </tr>
        !           702: 
        !           703:   <tr>
        !           704:     <td>ttyname</td>
        !           705:     <td>char *ttyname(int desc);</td>
        !           706:     <td>return name of a terminal</td>
        !           707:     <td>X</td>
        !           708:   </tr>
        !           709: 
        !           710:   <tr>
        !           711:     <td>times</td>
        !           712:     <td>clock_t times(struct tms *buf);</td>
        !           713:     <td>get process times</td>
        !           714:     <td>X</td>
        !           715:   </tr>
        !           716: 
        !           717:   <tr>
        !           718:     <td>tzset</td>
        !           719:     <td>void tzset(void);</td>
        !           720:     <td>initialize time conversion information </td>
        !           721:     <td>X</td>
        !           722:   </tr>
        !           723: 
        !           724: </tbody>
        !           725: </table>
        !           726: 
        !           727: 
        !           728: <h3>Terminal I/O - &lt;termios.h&gt;</h3>
        !           729: 
        !           730: <table border="1" cellspacing="0">
        !           731: <tbody>
        !           732: 
        !           733: <tr>
        !           734:   <th width="80">Name</th>
        !           735:   <th width="400">Synopsis</th>
        !           736:   <th>Description</th>
        !           737:   <th width="70">Support?</th>
        !           738: </tr>
        !           739: 
        !           740: 
        !           741:   <tr>
        !           742:     <td>getpid</td>
        !           743:     <td>pid_t getpid(void);</td>
        !           744:     <td>get process identification</td>
        !           745:     <td>X</td>
        !           746:   </tr>
        !           747: 
        !           748:   <tr>
        !           749:     <td>tcgetattr</td>
        !           750:     <td>int tcgetattr(int fd, struct termios *termios_p);</td>
        !           751:     <td>get terminal attributes</td>
        !           752:     <td>X</td>
        !           753:   </tr>
        !           754: 
        !           755:   <tr>
        !           756:     <td>tcsetattr</td>
        !           757:     <td>int tcsetattr(int fd, int optional_actions, struct termios *termios_p);</td>
        !           758:     <td>set terminal attributes</td>
        !           759:     <td>X</td>
        !           760:   </tr>
        !           761: 
        !           762:   <tr>
        !           763:     <td>tcdrain</td>
        !           764:     <td>int tcdrain(int fd);</td>
        !           765:     <td>wait for all output to be transmitted to the terminal</td>
        !           766:     <td>X</td>
        !           767:   </tr>
        !           768: 
        !           769:   <tr>
        !           770:     <td>tcflow</td>
        !           771:     <td>int tcflow(int fd, int action);</td>
        !           772:     <td>suspend/restart terminal output</td>
        !           773:     <td>X</td>
        !           774:   </tr>
        !           775: 
        !           776:   <tr>
        !           777:     <td>tcflush</td>
        !           778:     <td>int tcflush(int fd, int queue_selector);</td>
        !           779:     <td>discard terminal data</td>
        !           780:     <td>X</td>
        !           781:   </tr>
        !           782: 
        !           783:   <tr>
        !           784:     <td>tcsendbreak</td>
        !           785:     <td>int tcsendbreak(int fd, int duration);</td>
        !           786:     <td>send a break to a terminal</td>
        !           787:     <td>X</td>
        !           788:   </tr>
        !           789: 
        !           790:   <tr>
        !           791:     <td>cfgetispeed</td>
        !           792:     <td>speed_t cfgetispeed(struct termios *termios_p);</td>
        !           793:     <td>get input baud rate</td>
        !           794:     <td>X</td>
        !           795:   </tr>
        !           796: 
        !           797:   <tr>
        !           798:     <td>cfgetospeed</td>
        !           799:     <td>speed_t cfgetospeed(struct termios *termios_p);</td>
        !           800:     <td>get output baud rate</td>
        !           801:     <td>X</td>
        !           802:   </tr>
        !           803: 
        !           804:   <tr>
        !           805:     <td>cfsetispeed</td>
        !           806:     <td>int cfsetispeed(struct termios *termios_p, speed_t speed);</td>
        !           807:     <td>set input baud rate</td>
        !           808:     <td>X</td>
        !           809:   </tr>
        !           810: 
        !           811:   <tr>
        !           812:     <td>cfsetospeed</td>
        !           813:     <td>speed_t cfsetospeed(const struct termios *termios_p);</td>
        !           814:     <td>set output baud rate</td>
        !           815:     <td>X</td>
        !           816:   </tr>
        !           817: 
        !           818:   <tr>
        !           819:     <td>tcgetpgrp</td>
        !           820:     <td>pid_t tcgetpgrp(int fd);</td>
        !           821:     <td>get terminal foreground process group ID</td>
        !           822:     <td>X</td>
        !           823:   </tr>
        !           824: 
        !           825:   <tr>
        !           826:     <td>tcsetpgrp</td>
        !           827:     <td>int tcsetpgrp(int fd, pid_t pgrpid);</td>
        !           828:     <td>set terminal foreground process group ID</td>
        !           829:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           830:   </tr>
        !           831: 
        !           832: </tbody>
        !           833: </table>
        !           834: 
        !           835: 
        !           836: <h3>Process Groups and Job Control - &lt;unistd.h&gt;</h3>
        !           837: 
        !           838: <table border="1" cellspacing="0">
        !           839: <tbody>
        !           840: 
        !           841: <tr>
        !           842:   <th width="80">Name</th>
        !           843:   <th width="400">Synopsis</th>
        !           844:   <th>Description</th>
        !           845:   <th width="70">Support?</th>
        !           846: </tr>
        !           847: 
        !           848: 
        !           849:   <tr>
        !           850:     <td>setsid</td>
        !           851:     <td>pid_t setsid(void);</td>
        !           852:     <td>creates a session and sets the process group ID</td>
        !           853:     <td>X</td>
        !           854:   </tr>
        !           855: 
        !           856:   <tr>
        !           857:     <td>setpgid</td>
        !           858:     <td>int setpgid(pid_t pid, pid_t pgid);</td>
        !           859:     <td>set process group</td>
        !           860:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           861:   </tr>
        !           862: 
        !           863:   <tr>
        !           864:     <td>getpgrp</td>
        !           865:     <td>pid_t getpgrp(void);</td>
        !           866:     <td>get process group </td>
        !           867:     <td><img alt="Yes" height=15 width=20 src="img/checkmark.png"></td>
        !           868:   </tr>
        !           869: 
        !           870: </tbody>
        !           871: </table>
        !           872: 
        !           873: 
        !           874:       </td>
        !           875:     </tr>
        !           876:     <tr>
        !           877:       <td id="footer" colspan="2" style="vertical-align: top;">
        !           878:         <a href="http://sourceforge.net">
        !           879:         <img src="http://sourceforge.net/sflogo.php?group_id=132028&amp;type=1"
        !           880:         alt="SourceForge.net Logo" border="0" height="31" width="88"></a><br>
        !           881:         Copyright&copy; 2007 Kohsuke Ohtani
        !           882:       </td>
        !           883:     </tr>
        !           884: 
        !           885:   </tbody>
        !           886: </table>
        !           887: 
        !           888: </div>
        !           889: <div id="bottom"></div>
        !           890: 
        !           891: </body>
        !           892: </html>

CVSweb