🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by uncsmb Thu, 20 Aug 1981 22:04
missing file descriptors
#16
Author: uncsmb
Date: Thu, 20 Aug 1981 22:04
56 lines
1404 bytes
If a process is interrupted while trying to open a file, the
file descriptor tentatively assigned is lost -- unless you
know what it should be and close it!  The following program
demonstrates this.  (This was run under 4bsd, but I believe
the same problem is present in V6 and V7.)  Note that this
implies that a device driver close routine can be called
for a file that was never successfully opened -- which might
cause problems for weird devices/drivers.



#include <signal.h>
#include <errno.h>

#define	CLOSEDTTY	"/dev/ttyia"	/* should wait forever */
#define	FLIM		25	/* maximum open files */

extern errno;

main()
{
	int i, j;
	int f;
	int tick();
	char lbuf[100];

	signal(SIGALRM, tick);

	for (j = 0; j<2; j++) {
		for (i = 3; i < FLIM; i++)
			close(i);
		for (i=0; i<FLIM; i++) {
			alarm(2);
			f = open(CLOSEDTTY, 1);
			if (f >= 0) {
				printf("Huh -- f=%d\n", f);
			}
			else if (errno != EINTR) {
				alarm(0);
				sprintf(lbuf, "i=%d j=%d", i, j);
				perror(lbuf);
				break;
			}
			if (j) {
				if (close(3) < 0) perror("close");
			}
		}
		printf("end inner loop, i=%d\n", i);
	}
}

tick()
{
	signal(SIGALRM, tick);
	return;
}
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads