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 - <unistd.h></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 - <unistd.h></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 - <unistd.h></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 - <setjmp.h></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 - <signal.h></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 - <unistd.h><pwd.h><grp.h></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 - <termios.h></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 - <unistd.h></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&type=1"
! 880: alt="SourceForge.net Logo" border="0" height="31" width="88"></a><br>
! 881: Copyright© 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