MULTICS TECHNICAL BULLETIN MTB-689-03
To: MTB Distribution
From: Doug Howe
Date: August 20, 1986
Subject: The C Runtime System on Multics
-----------------------------------
This MTB describes the C runtime library as it will be
implemented on Multics. It is expected to be a complete list of
the runtime library available from System V Release 2.0(1)
Changes within this Mtb will be marked with change bars.
Revision 3: |
Changes include a complete list of the runtime routines to be |
available with the C compiler. |
-----------------------------------
_________________________________________________________________
(1) Unix and System V Release 2.0 are registered trademarks of AT
& T
MTB-689-03 C Runtime System
Comments should be sent to the authors:
via Multics mail to:
DGHowe.Multics
via posted mail to:
Douglas G. Howe
Advanced Computing Technology Centre
Foothills Professional Building
1620 29th St., N.W.
Calgary Alberta Canada T2N-4L7
via telephone to:
(403)-284-6400
(403)-284-6432 (Howe)
via forum on System-M to:
>udd>m>DGHowe>mtgs_dir>c>c_imp (c)
_________________________________________________________________
Multics project internal documentation; no to be reproduced or
distributed ouside the Multics project.
C Runtime System MTB-689-03
TABLE OF CONTENTS
Section Page Subject
======= ==== =======
1 1 Preface
2 2 Introduction
2.1 2 . . Goal
2.2 2 . . Background
2.3 2 . . References For this Document
3 3 Name Conflicts
4 3 C Runtime Routines
5 3 Math Routines
5.1 3 . . abs
5.2 3 . . acos
5.3 4 . . asin
5.4 4 . . atan
5.5 4 . . atan2
5.6 4 . . cabs
5.7 4 . . ceil
5.8 5 . . cos
5.9 5 . . cosh
5.10 5 . . exp
5.11 5 . . fabs
5.12 5 . . floor
5.13 5 . . frexp
5.14 6 . . hypot
5.15 6 . . ldexp
5.16 6 . . log
5.17 6 . . log10
5.18 6 . . modf
5.19 6 . . pow
5.20 7 . . sin
5.21 7 . . sinh
5.22 7 . . sqrt
5.23 7 . . tan
5.24 7 . . tanh
6 8 Utility and Conversion Routines
6.1 8 . . atof
6.2 8 . . atoi
6.3 8 . . atol
6.4 8 . . ecvt
6.5 9 . . fcvt
6.6 9 . . gcvt
6.7 9 . . isalpha
6.8 9 . . isalnum
6.9 9 . . isascii
6.10 10 . . iscntrl
6.11 10 . . isdigit
6.12 10 . . islower
6.13 10 . . isprint
6.14 10 . . ispunct
MTB-689-03 C Runtime System
6.15 10 . . isspace
6.16 11 . . isupper
6.17 11 . . memccpy
6.18 11 . . memchr
6.19 11 . . memcmp
6.20 11 . . memcpy
6.21 11 . . memset
6.22 12 . . strchr
6.23 12 . . strrchr
6.24 12 . . strcat
6.25 12 . . strcmp
6.26 12 . . strcpy
6.27 13 . . strlen
6.28 13 . . strncat
6.29 13 . . strncmp
6.30 13 . . strncpy
6.31 13 . . toascii
6.32 14 . . tolower
6.33 14 . . toupper
7 15 Storage Routines
7.1 15 . . calloc
7.2 15 . . free
7.3 15 . . malloc
7.4 15 . . realloc
8 16 Input and Output
9 16 General I/O Routines
9.1 16 . . exit
9.2 17 . . _exit
9.3 17 . . unlink
10 18 I/O using File Pointers
10.1 18 . . clearerr
10.2 18 . . fclose
10.3 18 . . fdopen
10.4 19 . . feof
10.5 19 . . ferror
10.6 19 . . fileno
10.7 19 . . fflush
10.8 19 . . fgetc
10.9 19 . . fgets
10.10 20 . . findiop
10.11 20 . . fopen
10.12 20 . . fprintf
10.13 20 . . fputc
10.14 20 . . fputs
10.15 21 . . fread
10.16 21 . . freopen
10.17 21 . . fscanf
10.18 21 . . fseek
10.19 21 . . ftell
10.20 22 . . fwrite
10.21 22 . . getc
10.22 22 . . getchar
C Runtime System MTB-689-03
10.23 22 . . gets
10.24 22 . . getw
10.25 22 . . printf
10.26 22 . . putc
10.27 23 . . putchar
10.28 23 . . puts
10.29 23 . . putw
10.30 23 . . rewind
10.31 23 . . scanf
10.32 23 . . setbuf
10.33 24 . . setvbuf
10.34 24 . . sprintf
10.35 24 . . sscanf
10.36 24 . . ungetc
11 25 I/O using File Descriptor Numbers
11.1 25 . . close
11.2 25 . . creat
11.3 25 . . lseek
11.4 25 . . open
11.5 26 . . read
11.6 26 . . write
12 26 Miscellaneous Routines
12.1 26 . . ctime
12.2 26 . . fork
12.3 27 . . longjmp
12.4 27 . . mktemp
12.5 27 . . sbrk
12.6 27 . . setjmp
12.7 28 . . system
12.8 28 . . tempnam
12.9 28 . . tmpfile
12.10 28 . . tmpnam
12.11 28 . . time
C Runtime System MTB-689-03
1. Preface
This MTB describes the Runtime Library that will support the 'C'
language on Multics. *
MTB-689-03 C Runtime System
2. Introduction
2.1. Goal
The Goal of this MTB is to describe a C runtime System compatible
with System V release 2.0; that will allow the porting of C
programs and packages from other systems.
2.2. Background
The C language was designed to be portable, and is currently
working on many different machines and operating systems. C's
native environment is usually a Unix operating system, which
contains both C librarys and system libraries. A common
misconception is that C consists of both of these libraries, when
they are actually seperate: one for the language support and the
other for the system support. The Runtime Library to be defined
here will only contain those routines that the C language is
dependant on and will leave the development of an operating
system library to a later date.
2.3. References For this Document
1) MTB-647 created by Greg Baryza.
2) The C Programming Language
Brian W. Kernighan & Dennis M. Ritchie
Prentice-Hall (1978)
Englewood Cliffs, New Jersey
3) The Multics Programmers Reference Manual (10.2 AG91-03A)
4) MTB on C for Multics by Doug Howe (MTB 688).
5) MTB titled The Multics C Execution Environment by Doug Howe
(MTB 691).
C Runtime System MTB-689-03
3. Name Conflicts
Several C routines listed below, have name clashes with existing
Multics routines. These clashes will be taken care of with the
use of the existing binder or with the new Link Editor defined in
Mtb 718.
ceil date exit floor mod system time unlink
4. C Runtime Routines
The C runtime routines have been broken down into five
categories: Math Routines, Utility & Conversion Routines,
Storage Routines, Input/Output Routines, and Miscellaneous
Routines.
5. Math Routines
The math routines being implemented will use the Mutlics math |
routines whenever possible. The following list defines the C |
Math Routines:
abs cabs fabs log sin
acos ceil floor log10 sinh
asin cos frexp modf sqrt
atan cosh hypot pow tan
atan2 exp ldexp rpow tanh
5.1. abs
int abs(i);
int i;
Returns the absolute value of its argument.
MTB-689-03 C Runtime System
5.2. acos
double acos(x);
double x;
Returns the arc-cosine of its argument in radians.
5.3. asin
double asin(x);
double x;
Returns the arc-sine of its argument in radians.
5.4. atan
double atan(x);
double x;
Returns the arc-tangent of its argument in radians.
5.5. atan2
double atan2(x,y);
double x,y;
Returns the arc-tangent of x/y in the range of -pi to pi.
5.6. cabs
double cabs(z);
struct { double x,y; } z;
Returns the absolute value of a complex number. Equivalent to
sqrt(x^2 + y^2).
5.7. ceil
double ceil(x);
double x;
Returns its argument rounded up if modf (x, temp) > 0.
C Runtime System MTB-689-03
5.8. cos
double cos(x);
double x;
Returns the cosine of its argument. (radians).
5.9. cosh
double cosh(x);
double x;
Returns the hyperbolic-cosine of its argument.
5.10. exp
double exp(x);
double x;
Returns the e to the power of its argument. (anti-log base e)
5.11. fabs
double fabs(x);
double x;
Returns the absolute value of its argument.
5.12. floor
double floor(x);
double x;
Returns its argument rounded down if modf (x, temp) < 0.
5.13. frexp
double frexp(value,eptr);
double value;
int *eptr;
Returns the mantissa of a double value x, of magnitude less than
1 and stores an integer n such that value = x * 2**n indirectly
through eptr;
MTB-689-03 C Runtime System
5.14. hypot
double hypot(x,y);
double x,y;
Returns the hypotenuse length given two co-ordinates. Equivalent
to sqrt(x^2 + y^2).
5.15. ldexp
double ldexp (value,exp);
double value;
int exp;
Returns the value of value * 2**exp;
5.16. log
double log(x);
double x;
Returns the log base e of its argument.
5.17. log10
double log10(x);
double x;
Returns the log base 10 of its argument.
5.18. modf
double modf(value,iptr);
double value,*iptr;
Returns the fractional part of value and stores the integer part
indirectly through iptr.
5.19. pow
double pow(x,y);
double x,y;
Returns the first argument raised to the power of the second
argument.
C Runtime System MTB-689-03
5.20. sin
double sin(x);
double x;
Returns the sine of its argument. (radians).
5.21. sinh
double sinh(x);
double x;
Returns the hyperbolic-sine of its argument.
5.22. sqrt
double sqrt(x);
double x;
Returns the square-root of its argument.
5.23. tan
double tan(x);
double x;
Returns the tangent of its argument. (radians).
5.24. tanh
double tanh(x);
double x;
Returns the hyperbolic-tangent of its argument.
MTB-689-03 C Runtime System
6. Utility and Conversion Routines
The following routines are considered to be Utility or conversion
routines:
atof isalnum isspace strchr strncmp |
atoi isascii isupper strrchr strncpy |
atol iscntrl memccpy strcat toascii |
ecvt isdigit memchr strcmp tolower |
fcvt islower memcmp strcpy toupper |
gcvt isprint memcpy strlen |
isalpha ispunct memset strncat |
6.1. atof
double atof(x);
char *x;
Ascii to float. Convert a string to a double value.
6.2. atoi
int atoi(x);
char *x;
Ascii to integer. Convert a string to a integer value.
6.3. atol
long atol(x);
char *x;
Ascii to long. Convert a string to a long value.
6.4. ecvt
char * ecvt(value,ndigit,decpt,sign);
double value;
int ndigit,*decpt,*sign;
Converts 'value' into a character string.
C Runtime System MTB-689-03
6.5. fcvt
char * fcvt(value,ndigit,decpt,sign);
double value;
int ndigit,*decpt,*sign;
Convert 'value' to ascii string rounded as in Fortrans 'F'
format.
6.6. gcvt
char * gcvt(value,ndigit,buffer);
double value;
int ndigit;
char *buffer;
Convert 'value' into a string allocated in 'buffer' with 'ndigit'
significant digits. Uses Fortrans 'F' format if possible
otherwise 'E' format.
6.7. isalpha
isalpha (c);
Is a MACRO defined with the #define statement. Returns non-zero
if 'c' is alphabetic, zero if not.
6.8. isalnum
isalnum (c);
Is a MACRO defined with the #define statement. Returns non-zero
if c is numeric, zero if not.
6.9. isascii
isascii (c);
Is a MACRO defined with the #define statement. Returns non-zero
if c is an Ascii character, zero if not.
6.10. iscntrl
iscntrl (c);
MTB-689-03 C Runtime System
Is a MACRO defined with the #define statement. Returns non-zero
if c is a control character (delete char (177) or less than 040),
zero if not.
6.11. isdigit
isdigit (c);
Is a MACRO defined with the #define statement. Returns non-zero
if 'c' is digit, zero if not.
6.12. islower
islower (c);
Is a MACRO defined with the #define statement. Returns non-zero
if 'c' is lower-case letter, zero if not.
6.13. isprint
isprint (c);
Is a MACRO defined with the #define statement. Returns non-zero
if c is a printable character (040 through 176), zero if not.
6.14. ispunct
ispunct (c); Is a MACRO defined with the #define statement.
Returns non-zero if c is a punctuation character, zero if not.
6.15. isspace
isspace (c);
Is a MACRO defined with the #define statement. Returns non-zero
if 'c' is blank, tab or newline; zero if not.
6.16. isupper
isupper (c);
C Runtime System MTB-689-03
Is a MACRO defined with the #define statement. Returns non-zero
if 'c' is upper-case letter, zero if not.
|
|
6.17. memccpy |
|
char *memccpy (s1, s2, c, n) |
char *s1, *s2; |
int c, n; |
Copy characters from s2 to s1, stopping after the first occurence |
of the character c, or after n characters have been copied. |
|
|
|
6.18. memchr |
|
char *memchr (s, c, n) |
char *s; |
int c, n; |
Returna pointer to the first occurence of c in the first n |
characters of s or null if c does not exist. |
|
|
|
6.19. memcmp |
|
int memcmp (s1, s2, n) |
char *s1, *s2; |
int n; |
Compares the first n characters of s1 to s2 and returns < 0 (if |
s1 is < s2) or 0 (if s1 = s2) or > 0 (if s1 > s2). |
|
|
|
6.20. memcpy |
|
char *memcpy (s1, s2, n) |
char *s1, *s2; |
int n; |
Copy n characters from s2 to s1 returning s1. |
|
|
|
6.21. memset |
|
char *memset (s, c, n) |
char *s; |
int c, n; |
Set the first n characters in s to c returning s. |
MTB-689-03 C Runtime System
6.22. strchr
char *strchr(s,c);
char *s,c;
Returns a pointer to the first occurance of c in the string s or
null if c does not occur in string s. strchr is equivalent to
index in some verisons of C.
6.23. strrchr
char *strrchr(s,c);
char *s,c;
Returns a pointer to the last occurance of c in the string s or
null if c does not occur in string s. strrchr is equivalent to
rindex in some versions of C.
6.24. strcat
char * strcat(x,y);
char *x,*y;
Append y to x returning a pointer to the result.
6.25. strcmp
int strcmp(x,y);
char *x,*y;
Lexigraphically compare x and y returning an integer value that
describes their relationship.
x < y returns -1
x = y returns 0
x > y returns 1
6.26. strcpy
char * strcpy(x,y);
char *x,*y;
Copy y into x returning the result.
C Runtime System MTB-689-03
6.27. strlen
int strlen(x);
char *x;
Return the length of the string.
6.28. strncat
char * strncat(x,y,n);
char *x,*y;
int n;
Append at most n characters from y into x returning the result.
6.29. strncmp
int strncmp(x,y,n);
char *x,*y;
int n;
Lexigraphically compare at most n characters between x and y
returning an integer value that describes their relationship.
x < y returns -1
x = y returns 0
x > y returns 1
6.30. strncpy
char * strncpy(x,y,n);
char *x,*y;
int n;
Copies at most n characters from y into x returning the result. |
|
|
6.31. toascii |
|
int toascii (c) |
int c; |
Converts the inputed integer to an ascii character. |
|
|
|
6.32. tolower |
|
int tolower (c) |
int c; |
Converts the inputed character to its lower case equivalent. |
MTB-689-03 C Runtime System
6.33. toupper |
|
int tolower (c) |
int c; |
Converts the inputed character to its upper case equivalent. |
C Runtime System MTB-689-03
7. Storage Routines
The standard Unix storage routines of malloc, calloc, realloc and
free will be implemented for Multics using the standard Multics
area manager. This will limit the maximum size of an allocation
to 255K words - 50 words for the area managers overhead. The
Storage Routines are outlined below:
calloc free malloc realloc
7.1. calloc
char * calloc();
string = calloc(integer_x, integer_y);
Return a pointer to enough clear space (zeroed) to hold x copies
of size y. The storage is later freed via a call to 'free'.
7.2. free
void free();
free(ptr);
Free the space previously allocated at ptr. The storage must
have been allocated via the 'calloc', 'malloc' or 'realloc'
routines.
7.3. malloc
char * malloc();
string = malloc(size);
Returns a pointer to allocated space sufficient to hold 'size'
bytes. The storage is later freed via a call to 'free'.
7.4. realloc
char * realloc();
string = realloc(oldloc, size);
Re-allocate storage returning a pointer to 'size' bytes given a
previously allocated pointer 'oldloc'. `oldloc' must be a
pointer to a non-freed area of storage. If `oldloc' has been
freed prior to the call to realloc the results are unpredictable.
The storage is later freed via 'free'.
MTB-689-03 C Runtime System
NOTE: The above is a redefinition of the original C routine
'realloc'. The original routine reallocated storage that had
just been freed.
8. Input and Output
In C, some routines refer to files that are indicated by integer
values (file descriptor numbers) and some routines refer to files
that are indicated by pointers (file pointer or file descriptor
pointers).
Unix, at it's basic level references files via a file descriptor.
There is a maximum number of these descriptors available per
process (20). Multics on the other hand uses a defined structure
called the iocb block to allow references to segments.
The FILE pointer type of C is a pointer to a defined structure of
type FILE which contains the files descriptor number and other
associated information. The routines that perform file I/O with
FILE pointers call a series of base level routines with the file
descriptor from the structure that they point to.
Therefore Multics C will redefine the iobuf structure to include
a pointer to an iocb block so that the IO routines can access the
standard Multics iocb block structure. *
9. General I/O Routines
The following is a list of general I/O Routines. *
exit _exit unlink
9.1. exit
void exit(code);
int code;
Leave main procedure and close all files opened in main
procedure. Set C_exit_status_severity_ to 'code'. `exit' will
signal a condition to be trapped in main_ which will reset the
current environment and return the passed status code unless the
current level of exectuion is 0. See the MTB on the Execution
Environment (MTB 691) for details.
C Runtime System MTB-689-03
9.2. _exit
void _exit(code);
int code;
Same as exit except no files are closed. Leave main procedure,
setting status variable to 'code'. Due to the environment of
Multics and the structure of the C environment on Multics this
routine will generate an error message.
9.3. unlink
int unlink(filename);
char *filename;
Delete file 'filename'. Returns a zero if successful. Although
this is a Unix system function it will be required by the C
language. This will operate similar to the delete command on
Mutlics.
MTB-689-03 C Runtime System
10. I/O using File Pointers
These routines do I/O on files indicated by file pointers. By
convention their are three special file pointers: stdin, stdout,
and stderr. (corresponding to user_input, user_output, and
error_output)
The following routines expect file pointers as their arguments or
return file pointers as their output.
clearerr fopen getc scanf |
fclose fprintf gets setbuf |
fdopen fputc getw setvbuf |
feof fputs getchar sprintf |
ferror fread printf sscanf |
feof fscanf putc ungetc |
fflush freopen putchar |
fgetc fseek puts |
fgets ftell putw |
findiop fwrite rewind |
10.1. clearerr
clearerr(fp); FILE *fp;
Is a MACRO defined with the #define statement. Clears the error
flag associated with the file pointed to by fp.
10.2. fclose
int fclose(fp);
FILE *fp;
Close the file pointed to by fp.
10.3. fdopen
FILE *fdopen (fd,type);
int fd;
char *type;
Associates a stream with a file descriptor. Where stream implies
buffered IO.
C Runtime System MTB-689-03
10.4. feof
int feof(fp); FILE *fp;
Returns non-zero when end-of-file is reached on input file
pointed to by fp.
10.5. ferror
int ferror(fp);
FILE *fp;
Returns non-zero after an error occurs while reading/writing file
pointed to by fp. The error indication lasts until a clearerr is
called.
10.6. fileno
fileno (fp); FILE *fp;
Is a MACRO defined with the #define statement. Returns the file
descriptor associated with the file pointer.
10.7. fflush
int fflush(fp);
FILE *fp;
Flush out any pending output on file pointed to by fp.
10.8. fgetc
int fgetc(fp);
FILE *fp;
Return a character/int from file pointed to by fp.
10.9. fgets
char *fgets(line,MAXLINE,fp);
char *line;
int MAXLINE;
FILE *fp;
Returns line. Read at most MAXLINE-1 characters into line from
file pointed to by fp.
MTB-689-03 C Runtime System
10.10. findiop |
|
FILE *findiop () |
Returns a FILE pointer to the next free iobuf entry. |
10.11. fopen
FILE *fopen(filename,mode);
char *filename,*mode;
Open a file named filename with modes mode returning a pointer to
it.
10.12. fprintf
int fprintf(fp,control_string);
FILE *fp;
char *control_string;
Output arguments under the control of "control_string" to file
pointed to by fp.
10.13. fputc
int fputc(c,fp);
FILE *fp;
char c;
Output character 'c' into file pointed to by fp.
10.14. fputs
int fputs(string,fp);
FILE *fp;
char *string;
Output string to file pointed to by fp.
10.15. fread
int fread(buffer,size,n,fp);
FILE *fp;
char *buffer;
int size,n;
Read into buffer at most n items of size 'size' from file pointed
to by fp. Return the number of items actually read.
C Runtime System MTB-689-03
10.16. freopen
FILE *freopen(filename,type,fp);
char *filename,*type;
FILE *fp;
Returns original value of fp. Closes file pointed to by fp.
Opens file "filename" with mode "type" and set fp to point to
this file.
10.17. fscanf
int fscanf(fp,control_string);
FILE *fp;
char *control_string;
Read from file pointed to by fp under control of "control_string"
into variables located by the pointer arguments following
"control_string". Returns the number of items successfully read.
10.18. fseek
int fseek(fp,long_pos,origin);
FILE *fp;
long long_pos;
int origin;
Seeks to a new position in file pointed to by fp. Change current
file position by long_pos characters. When origin=0 relative to
file start, origin=1 relative to current position, origin=2
relative to end-of-file. Returns a zero value when successful.
10.19. ftell
long ftell(fp);
FILE *fp;
Obsolete. Returns the current position in bytes of file pointed
to by fp.
10.20. fwrite
int fwrite(buffer,size,n,fp);
FILE *fp;
char *buffer;
int size,n;
Output at most n items of size 'size' from buffer into the file
pointed to by fp.
MTB-689-03 C Runtime System
10.21. getc
int getc(fp);
FILE *fp;
Returns the character/integer value of the next character read
from file pointed to by fp.
10.22. getchar
int getchar();
Returns the character/integer value of the next character read
from standard input.
10.23. gets
char * gets(string);
char *string;
Read a line from standard input into string. Returns string.
Replaces newline character with null-character (end-of-string).
10.24. getw
int getw(fp);
FILE *fp;
Gets the next word from the file.
10.25. printf
int printf(control_string);
char *control_string
Output arguments to standard output using format specified in
"control_string".
10.26. putc
int putc(c,fp);
FILE *fp;
char c;
Output a character 'c' into file pointed to by 'fp'. Return the
character.
C Runtime System MTB-689-03
10.27. putchar
int putchar(c);
char c;
Output a character 'c' to standard output. Return the character.
10.28. puts
int puts(string);
char *string;
Output a string and a newline char to stdio.
10.29. putw
putw(w,fp);
FILE *fp;
Putw writes the word w to the file fp;
10.30. rewind
void rewind(fp);
FILE *fp
Resets the file pointed to by fp to the begining of the file.
Reset any error flags set for the file and flush the buffer
associated with the file.
10.31. scanf
int scanf(string);
char *string;
Reads from standard input assigning to pointer variable using
format specified by "control_string". Return the number of
values successfully read.
10.32. setbuf
setbuf(fp,buf);
FILE *fp;
char *buf;
Use buf as the I/O buffer used by the file pointed to by fp.
Note: buf must be at least as long as the manifest constant
BUFSIZ.
MTB-689-03 C Runtime System
10.33. setvbuf |
|
int setvbuf (fp, buf, type, size) |
FILE *fp; |
char *buf; |
int type, size; |
Use buf as the I/O buffer for the file pointed to by fp. Set the |
file buffer type to one of the following: |
|
IOFBF causes input/ouput to be fully buffered. |
IOLBF causes input/output to be line buffered; the buffer |
will be flushed when a new line is written or when the |
buffer is full, or if input is requested. |
IONBF causes input/output to be unbuffered. |
10.34. sprintf
char *sprintf(string,control_string);
char *string,*control_string
Format arguments under control of 'control_string' into string.
NOTE: Due to the size difference between pointers and integers
this function will return a character pointer and not an int as
is deifned in some documentation.
10.35. sscanf
int sscanf(string,control_string);
char *string,*control_string
Read values from string using the format specified in
"control_string" into the arguments specified by the pointer
arguments. Return the number of values successfully read.
10.36. ungetc
char ungetc(c,fp);
int c;
FILE *fp;
Sets c to be the next character read from file pointed to by fp.
C Runtime System MTB-689-03
11. I/O using File Descriptor Numbers
The following routines perform file I/O on files indicated by a
file descriptor number (int). By convention file descriptors map
onto file pointers (0 => stdin, 1 => stdout, 2 => stderr).
close creat lseek open read write
11.1. close
int close(fd);
int fd;
Close the file indicated by fd. Return zero if successful.
11.2. creat
int creat(filename);
char *filename;
Create a file "filename" and return a file descriptor to it.
Although considered a part of the operating system this function
is required for C program to create a new file.
NOTE: This is different than the standard definition but is how
the routine has been implemented in System V.
11.3. lseek
int lseek(fd,offset,origin);
int fd,origin;
long offset;
Seek to position 'offset' in file fd. When origin=0 position is
relative to beginning of file. When origin=1 position is
relative to current position. When origin=2 position is relative
to end-of-file.
11.4. open
int open(filename,mode);
char *filename;
int mode;
Return a file descriptor indicating file "filename" opened with
mode "mode". mode(0,1,2) = (read, write, read_write).
MTB-689-03 C Runtime System
11.5. read
int read(fd,buffer,size);
int fd,size;
char *buffer;
Read up to size characters into buffer from file indicated by
'fd' returning the actual number of characters read.
11.6. write
int write(fd,buffer,size);
int fd,size;
char *buffer;
Write at most 'size' bytes from buffer into file indicated by fd.
Returns the number of characters actually written, -1 indicates
an error.
12. Miscellaneous Routines
The following miscellaneous routines will be added to the C
Runtime Library.
ctime longjmp sbrk system tempnam time |
fork mktemp setjmp tmpfile tmpnam |
12.1. ctime
char *ctime(tvec);
int tvec[2];
Ctime converts a time as returned by the C runtime function
`time' into a character string representing that date and time
and returns a pointer to it. The string has the form of "Sun Sep
16 01:03:52 1978n0" where all the fields have a constant width.
12.2. fork
fork();
Fork is a function on Unix Systems that generates a child
process. On Multics this routine will generate an error at all
times.
C Runtime System MTB-689-03
12.3. longjmp
longjmp(env,val);
jmp_buf env;
int val;
On Multics longjmp will perform a non-local goto to a label saved
in setjmp. For a complete description see the definition of
setjmp that follows.
|
|
12.4. mktemp |
|
char *mktemp(template) |
char *template; |
Mktemp replaces the string pointed to by template with a unique |
name. For Multics this will be a shriek name. The minimum size |
required is 15 characters. For a more descriptive explaination |
see unique_chars_ in the AG93 Manual. |
12.5. sbrk
char *sbrk(size);
int size;
Sbrk usually is used by C programmers to gain free space in their
heap area. Sbrk extends the area by the passed size and returns
a pointer to the beginning of this allocated space. On Multics
this can be achieved by a call to malloc and therefore sbrk will
return the value of a call to malloc with the parameter size.
12.6. setjmp
setjmp(env);
jump_buf env;
Non-local gotos in C are performed by a coordinated use of setjmp
and longjmp. Setjmp saves the current Program Counter and Stack
Pointer for refrence in longjmp which restores the saved values.
On Multics this will be done by saving a label value in setjmp of
the current location and performing a non-local goto to that
label in longjmp. In this way the standard Multics non-local
goto mechanism will be invoked.
12.7. system
int system(string);
char *string;
Execute command string returning a standard status code. |
MTB-689-03 C Runtime System
12.8. tempnam |
|
char *tempanm (dir, pfx) |
char *dir, *pfx; |
Tempnam generates a unique file name. Tempnam allows the user to |
specify what directory is to be used. If dir is null the users |
process directory will be used. If pfx is non null it will be |
taken to be the prefix of the unique name generated. If an error |
occurs null will be returned. |
|
|
|
12.9. tmpfile |
|
FILE *tmpfile() |
Tmpfile creates a temporary file opened for update ("w+"). If |
the file can not be opened a null is returned otherwise the file |
pointer is returned. The file will be created in the process |
directory on Multics. |
|
|
|
12.10. tmpnam |
|
char *tmpnam (s) |
char *s; |
tmpnam will generate a file name using the users process |
directory as a prefix. The name will be store on the heap and |
any further invocations of tmpnam will destroy the stored value. |
The address of the stored name will be returned. If s is non |
null the name will be store in s. s should be large enough to |
store a full Multics path name (64 characters). |
12.11. time
long time(tloc);
long *tloc;
Time returns the number of seconds that have elapsed since
00:00:00 01 Jan 1970 GMT. If tloc is not null a copy is also
stored at *tloc.