Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!lll-crg!nike!sri-spam!sri-unix!hplabs!pyramid!decwrl!sun!imagen!atari!dyer From: dyer@atari.UUcp (Landon Dyer) Newsgroups: net.micro.atari16 Subject: Re: Fforce() Message-ID: <449@atari.UUcp> Date: Sat, 1-Nov-86 13:50:57 EST Article-I.D.: atari.449 Posted: Sat Nov 1 13:50:57 1986 Date-Received: Tue, 4-Nov-86 01:05:26 EST References: <1639@cwruecmp.UUCP> Organization: Atari Corp., Sunnyvale CA Lines: 42 In article <1639@cwruecmp.UUCP>, pm@cwruecmp.UUCP (Prabhaker Mateti) writes: > /* > In a program I am writing, I need to redirect input/output. E.g., to > redirect input from a file, I do Fforce(0, fd), but then I can't close > the fd and reuse that handle. The following code demonstrates this. > Any body has a clue as to what is wrong here?? > */ > > #include > > main() > { > int fi, ff, fc, i; > > for (i=0; i < 81; i++) > { fi = Fopen ("in", 0); > ff = Fforce(0, fi); > fc = Fclose(fi); > printf("fi ff fc %d %d %d \n", fi, ff, fc); > } > } The problem here is the Fclose(fi) --- you can't close a handle, even after an Fforce, because handles in GEMDOS are shared between ALL processes. [In theory, you could open a file, do a Pexec(), and have the child process do I/O on the handle that the parent opened. In practice, this is a bad practice....] Negative handles correspond (kind of) to BIOS devices, -1 is CON:, -2 is AUX:, and so on. Handles from 0 to 5 are "standard" handles, and are inherited by the child on a Pexec(). Handles 6 and up always refer to files. Standard handles are a kind of indirection; they "point" to a character device (handle < 0) or a file handle (> 5). -- -Landon Dyer, Atari Corp. {sun,lll-lcc,imagen}!atari!dyer /-----------------------------------------------\ | The views represented here do not necessarily | "If Business is War, then | reflect those of Atari Corp., or even my own. | I'm a Prisoner of Business!" \-----------------------------------------------/