Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watmath!clyde!rutgers!cmcl2!husc6!think!ames!sdcsvax!ucsdhub!hp-sdd!hplabs!hpda!hpcupt1!hpisod2!decot From: decot@hpisod2.UUCP Newsgroups: comp.lang.c Subject: Re: stdio error detection Message-ID: <2550035@hpisod2.HP.COM> Date: Fri, 4-Dec-87 16:41:02 EST Article-I.D.: hpisod2.2550035 Posted: Fri Dec 4 16:41:02 1987 Date-Received: Wed, 9-Dec-87 22:08:25 EST References: <289@cresswell.quintus.UUCP> Organization: Hewlett Packard, Cupertino Lines: 195 EEEERRRRRRRRCCCCTTTTLLLL((((2222)))) EEEExxxxppppeeeerrrriiiimmmmeeeennnnttttaaaallll EEEERRRRRRRRCCCCTTTTLLLL((((2222)))) NNNNAAAAMMMMEEEE errctl - specify what to do when system calls fail SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS iiiinnnntttt ((((((((****eeeerrrrrrrrccccttttllll)))) ((((_f_u_n_c)))))))) iiiinnnntttt ((((****_f_u_n_c))))(((())));;;; ####iiiinnnncccclllluuuuddddeeee <<<>>> ####iiiinnnncccclllluuuuddddeeee <<<>>> iiiinnnntttt _f_u_n_c ((((_c_a_l_l_i_d,,,, _s_y_s_e_r_r_n_o,,,, _r_e_t_v_a_l,,,, _a_r_g_s)))) iiiinnnntttt _c_a_l_l_i_d,,,, _s_y_s_e_r_r_n_o,,,, ****_r_e_t_v_a_l,,,, ****_a_r_g_s;;;; DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN _E_r_r_c_t_l specifies what do to when the calling process calls a function listed in Section 2 of this manual and the function fails. This occurs whenever the system would ordinarily set the value of the external integer variable eeeerrrrrrrrnnnnoooo to a non- zero value. Using this facility, the programmer can supply a custom function to provide modular handling of exceptional errors. The value of _f_u_n_c indicates the action to be taken when subsequent system calls fail. The possible values are: EEEERRRRRRRR____DDDDFFFFLLLL Upon the failure of a system call, set the value of eeeerrrrrrrrnnnnoooo accordingly, and return the value ordinarily returned by the call (usually ----1111) unmodified. This is the default action. EEEERRRRRRRR____IIIIGGGGNNNN Upon the failure of a system call, do not change the value of eeeerrrrrrrrnnnnoooo, but return the value ordinarily returned by the call (usually ----1111) unmodified. _f_u_n_c_t_i_o_n _a_d_d_r_e_s_s Upon the failure of a system call, invoke the indicated handling function. The arguments passed to the handling function are as follows: _c_a_l_l_i_d A system call identifier representing the system call that failed. Values for the identifier are of the form SSSSYYYYSSSS_____C_A_L_L, where _C_A_L_L is the name of the system call converted to upper case. These values are defined in <<<>>>. Hewlett-Packard Company - 1 - Dec 4, 1987 EEEERRRRRRRRCCCCTTTTLLLL((((2222)))) EEEExxxxppppeeeerrrriiiimmmmeeeennnnttttaaaallll EEEERRRRRRRRCCCCTTTTLLLL((((2222)))) _s_y_s_e_r_r_n_o The eeeerrrrrrrrnnnnoooo value corresponding to the failure (see _e_r_r_n_o(2)). _r_e_t_v_a_l A pointer to a location containing the integer value that ordinarily would be returned by the failed system call. _a_r_g_s An integer pointer parameter whose usage is currently implementation-defined. The external integer variable eeeerrrrrrrrnnnnoooo is not affected unless explicitly changed during the execution of the handling function. The integer value left in *_r_e_t_v_a_l by the handling function is returned to the user program as the apparent return value of the system call. The integer value returned by the handling function determines whether the failed system call is to be restarted after completion of the handling function. If the returned value is non-zero, the system call will be restarted. The status of system call error handling is inherited by child processes created by _f_o_r_k(_2) or _v_f_o_r_k(_2), and is set to EEEERRRRRRRR____DDDDFFFFLLLL on successful calls to _e_x_e_c(2). RRRREEEETTTTUUUURRRRNNNN VVVVAAAALLLLUUUUEEEE _E_r_r_c_t_l(2) returns the most recently installed previous value of _f_u_n_c installed by the calling process. EEEEXXXXAAAAMMMMPPPPLLLLEEEESSSS In a program that occasionally creates additional processes, changing demand for system resources could prevent the processes from being created. In such a case, _e_r_r_c_t_l(2) can be used to handle such exceptions flexibly: ####iiiinnnncccclllluuuuddddeeee <<<>>> ####iiiinnnncccclllluuuuddddeeee <<<>>> iiiinnnntttt eeeerrrrrrrrhhhhaaaannnnddddlllleeeerrrr(((())));;;; mmmmaaaaiiiinnnn(((()))) {{{{ ............ Hewlett-Packard Company - 2 - Dec 4, 1987 EEEERRRRRRRRCCCCTTTTLLLL((((2222)))) EEEExxxxppppeeeerrrriiiimmmmeeeennnnttttaaaallll EEEERRRRRRRRCCCCTTTTLLLL((((2222)))) ((((vvvvooooiiiidddd)))) eeeerrrrrrrrccccttttllll((((eeeerrrrrrrrhhhhaaaannnnddddlllleeeerrrr))));;;; ............ ssssyyyysssstttteeeemmmm((((""""ssssoooommmmeeeetttthhhhiiiinnnngggg""""))));;;; ............ }}}} iiiinnnntttt eeeerrrrrrrrhhhhaaaannnnddddlllleeeerrrr((((ccccaaaalllllllliiiidddd,,,, ssssyyyysssseeeerrrrrrrrnnnnoooo,,,, rrrreeeettttvvvvaaaallll,,,, aaaarrrrggggssss)))) iiiinnnntttt ccccaaaalllllllliiiidddd,,,, ssssyyyysssseeeerrrrrrrrnnnnoooo,,,, ****rrrreeeettttvvvvaaaallll,,,, ****aaaarrrrggggssss;;;; {{{{ sssswwwwiiiittttcccchhhh ((((ccccaaaalllllllliiiidddd)))) {{{{ ccccaaaasssseeee SSSSYYYYSSSS____FFFFOOOORRRRKKKK:::: ccccaaaasssseeee SSSSYYYYSSSS____VVVVFFFFOOOORRRRKKKK:::: iiiiffff ((((ssssyyyysssseeeerrrrrrrrnnnnoooo ======== EEEEAAAAGGGGAAAAIIIINNNN)))) {{{{ sssslllleeeeeeeepppp((((4444))));;;; rrrreeeettttuuuurrrrnnnn ((((1111))));;;; }}}} }}}} rrrreeeettttuuuurrrrnnnn ((((0000))));;;; }}}} SSSSEEEEEEEE AAAALLLLSSSSOOOO intro(2), errno(2), exec(2), fork(2). Hewlett-Packard Company - 3 - Dec 4, 1987