Annotation of 43BSDReno/share/doc/ps2/03.uprog/p2, revision 1.1

1.1     ! root        1: .\"    @(#)p2  6.2 (Berkeley) 5/9/86
        !             2: .\"
        !             3: .NH
        !             4: BASICS
        !             5: .NH 2
        !             6: Program Arguments
        !             7: .PP
        !             8: When a C program is run as a command,
        !             9: the arguments on the command line are made available
        !            10: to the
        !            11: function
        !            12: .UL main
        !            13: as an argument count
        !            14: .UL argc
        !            15: and an array
        !            16: .UL argv
        !            17: of
        !            18: pointers to
        !            19: character strings
        !            20: that contain
        !            21: the arguments.
        !            22: By convention,
        !            23: .UL argv[0]
        !            24: is the command name itself,
        !            25: so
        !            26: .UL argc
        !            27: is always greater than 0.
        !            28: .PP
        !            29: The following program illustrates the mechanism:
        !            30: it simply echoes its arguments
        !            31: back to the terminal.
        !            32: (This is essentially the
        !            33: .UL echo
        !            34: command.)
        !            35: .P1
        !            36: main(argc, argv)       /* echo arguments */
        !            37: int argc;
        !            38: char *argv[];
        !            39: {
        !            40:        int i;
        !            41: 
        !            42:        for (i = 1; i < argc; i++)
        !            43:                printf("%s%c", argv[i], (i<argc-1) ? ' ' : '\en');
        !            44: }
        !            45: .P2
        !            46: .UL argv
        !            47: is a pointer to an array
        !            48: whose individual elements are pointers to arrays of characters;
        !            49: each is terminated by
        !            50: .UL \e0 ,
        !            51: so they can be treated as strings.
        !            52: The program starts by printing 
        !            53: .UL argv[1]
        !            54: and loops until it has printed them all.
        !            55: .PP
        !            56: The argument count and the arguments
        !            57: are parameters to
        !            58: .UL main .
        !            59: If you want to keep them around so other
        !            60: routines can get at them, you must
        !            61: copy them to external variables.
        !            62: .NH 2
        !            63: The ``Standard Input'' and ``Standard Output''
        !            64: .PP
        !            65: The simplest input mechanism is to read the ``standard input,''
        !            66: which is generally the user's terminal.
        !            67: The function
        !            68: .UL getchar
        !            69: returns the next input character each time it is called.
        !            70: A file may be substituted for the terminal by
        !            71: using the
        !            72: .UL <
        !            73: convention: 
        !            74: if
        !            75: .UL prog
        !            76: uses 
        !            77: .UL getchar ,
        !            78: then
        !            79: the command line
        !            80: .P1
        !            81: prog <file
        !            82: .P2
        !            83: causes
        !            84: .UL prog
        !            85: to read
        !            86: .UL file
        !            87: instead of the terminal.
        !            88: .UL prog
        !            89: itself need know nothing about where its input
        !            90: is coming from.
        !            91: This is also true if the input comes from another program via
        !            92: the 
        !            93: .U 
        !            94: pipe mechanism:
        !            95: .P1
        !            96: otherprog | prog
        !            97: .P2
        !            98: provides the standard input for
        !            99: .UL prog
        !           100: from the standard output of
        !           101: .UL otherprog.
        !           102: .PP
        !           103: .UL getchar
        !           104: returns the value
        !           105: .UL EOF
        !           106: when it encounters the end of file
        !           107: (or an error)
        !           108: on whatever you are reading.
        !           109: The value of
        !           110: .UL EOF
        !           111: is normally defined to be
        !           112: .UL -1 ,
        !           113: but it is unwise to take any advantage
        !           114: of that knowledge.
        !           115: As will become clear shortly,
        !           116: this value is automatically defined for you when
        !           117: you compile a program,
        !           118: and need not be of any concern.
        !           119: .PP
        !           120: Similarly,
        !           121: .UL putchar(c)
        !           122: puts the character
        !           123: .UL c
        !           124: on the ``standard output,''
        !           125: which is also by default the terminal.
        !           126: The output can be captured on a file
        !           127: by using
        !           128: .UL > :
        !           129: if
        !           130: .UL prog
        !           131: uses
        !           132: .UL putchar ,
        !           133: .P1
        !           134: prog >outfile
        !           135: .P2
        !           136: writes the standard output on
        !           137: .UL outfile 
        !           138: instead of the terminal.
        !           139: .UL outfile
        !           140: is created if it doesn't exist;
        !           141: if it already exists, its previous contents are overwritten.
        !           142: And a pipe can be used:
        !           143: .P1
        !           144: prog | otherprog
        !           145: .P2
        !           146: puts the standard output of
        !           147: .UL prog
        !           148: into the standard input of
        !           149: .UL otherprog.
        !           150: .PP
        !           151: The function
        !           152: .UL printf ,
        !           153: which formats output in various ways,
        !           154: uses
        !           155: the same mechanism as
        !           156: .UL putchar
        !           157: does,
        !           158: so calls to
        !           159: .UL printf
        !           160: and
        !           161: .UL putchar
        !           162: may be intermixed in any order;
        !           163: the output will appear in the order of the calls.
        !           164: .PP
        !           165: Similarly, the function
        !           166: .UL scanf
        !           167: provides for formatted input conversion;
        !           168: it will read the standard input and break it
        !           169: up into strings, numbers, etc.,
        !           170: as desired.
        !           171: .UL scanf
        !           172: uses the same mechanism as
        !           173: .UL getchar ,
        !           174: so calls to them may also be intermixed.
        !           175: .PP
        !           176: Many programs
        !           177: read only one input and write one output;
        !           178: for such programs I/O
        !           179: with
        !           180: .UL getchar ,
        !           181: .UL putchar ,
        !           182: .UL scanf ,
        !           183: and
        !           184: .UL printf
        !           185: may be entirely adequate,
        !           186: and it is almost always enough to get started.
        !           187: This is particularly true if
        !           188: the
        !           189: .UC UNIX
        !           190: pipe facility is used to connect the output of
        !           191: one program to the input of the next.
        !           192: For example, the following program
        !           193: strips out all ascii control characters
        !           194: from its input
        !           195: (except for newline and tab).
        !           196: .P1
        !           197: #include <stdio.h>
        !           198: 
        !           199: main() /* ccstrip: strip non-graphic characters */
        !           200: {
        !           201:        int c;
        !           202:        while ((c = getchar()) != EOF)
        !           203:                if ((c >= ' ' && c < 0177) || c == '\et' || c == '\en')
        !           204:                        putchar(c);
        !           205:        exit(0);
        !           206: }
        !           207: .P2
        !           208: The line
        !           209: .P1
        !           210: #include <stdio.h>
        !           211: .P2
        !           212: should appear at the beginning of each source file.
        !           213: It causes the C compiler to read a file
        !           214: .IT /usr/include/stdio.h ) (
        !           215: of
        !           216: standard routines and symbols
        !           217: that includes the definition of
        !           218: .UL EOF .
        !           219: .PP
        !           220: If it is necessary to treat multiple files,
        !           221: you can use
        !           222: .UL cat
        !           223: to collect the files for you:
        !           224: .P1
        !           225: cat file1 file2 ... | ccstrip >output
        !           226: .P2
        !           227: and thus avoid learning how to access files from a program.
        !           228: By the way,
        !           229: the call to
        !           230: .UL exit
        !           231: at the end is not necessary to make the program work
        !           232: properly,
        !           233: but it assures that any caller
        !           234: of the program will see a normal termination status
        !           235: (conventionally 0)
        !           236: from the program when it completes.
        !           237: Section 6 discusses status returns in more detail.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.