blob: b927e82b8b8590a9ae6ff5c936a4677f236d88db [file] [log] [blame]
/*****************************************************************************\
* test7.9.prog Report any open files (other than stdin, stdout, and stderr).
*****************************************************************************
* Copyright (C) 2006 The Regents of the University of California.
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
* Written by Morris Jette <jette1@llnl.gov>
* CODE-OCEC-09-009. All rights reserved.
*
* This file is part of Slurm, a resource management program.
* For details, see <https://slurm.schedmd.com/>.
* Please also read the included file: DISCLAIMER.
*
* Slurm is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* Slurm is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along
* with Slurm; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\*****************************************************************************/
#include <errno.h>
#include <stdio.h>
#include <stdlib.h> /* exit() prototype is here */
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
#define _DEBUG 0
#define _EXTREME_DEBUG 0
int main (int argc, char **argv)
{
int i;
struct stat buf;
/* sleep for 0 to 100 msec to induce some randomness
* and better detect any synchronization issues */
usleep(time(NULL) % 100000);
/* start at fd=3
* skip stdin, stdout, and stderr */
for (i=3; i<256; i++) {
if (fstat(i, &buf))
continue;
printf("FAILED: File descriptor %d is open\n", i);
#if _DEBUG
{
printf(" st_mode: 0%o\n",(int) buf.st_mode);
printf(" st_uid: %d\n", (int) buf.st_uid);
printf(" st_gid: %d\n", (int) buf.st_gid);
printf(" st_size: %d\n", (int) buf.st_size);
printf(" st_ino: %d\n", (int) buf.st_ino);
printf(" st_dev: %d\n", (int) buf.st_dev);
#if _EXTREME_DEBUG
{
char data[64];
int j;
size_t data_size;
lseek(i, 0, SEEK_SET);
data_size = read(i, data, 64);
if (data_size < 0)
printf(" read error: %s", strerror(errno));
else {
printf(" bytes read: %d\n", (int) data_size);
for (j=0; j<data_size; j++)
printf(" data[%d]:0x%x\n", j, data[j]);
}
}
#endif
}
#endif
}
exit(0);
}