You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.6 KiB

/*
* Copyright 2002-2019 Intel Corporation.
*
* This software is provided to you as Sample Source Code as defined in the accompanying
* End User License Agreement for the Intel(R) Software Development Products ("Agreement")
* section 1.L.
*
* This software and the related documents are provided as is, with no express or implied
* warranties, other than those that are expressly stated in the License.
*/
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <dirent.h>
int get_num_descr()
{
DIR *dir = opendir("/proc/self/fd");
struct dirent *entry;
int num = 0;
while ((entry = readdir(dir)) != 0) {
num++;
}
closedir(dir);
return num;
}
int main(int argc, char *argv[])
{
int i;
char si[5];
char fdstr[5];
int num = 30; /* Number of recursive calls. */
char fullpath[PATH_MAX];
int origfds = 0, fds = 0;
if (argc == 1)
{
i = 1;
origfds = get_num_descr();
} else {
sscanf(argv[1],"%i",&i);
sscanf(argv[2],"%i",&origfds);
}
if (argv[0][0] != '/')
readlink("/proc/self/exe", fullpath, PATH_MAX);
else
strcpy(fullpath, argv[0]);
i++;
if (i <= num ) {
sprintf(si,"%i",i);
sprintf(fdstr, "%i", origfds);
execlp(fullpath, "selfexec", si, fdstr, (char *)0);
}
printf("Number of recursive calls = %i.\n",--i);
fds = get_num_descr();
printf("Number of file descriptors: %d\n", fds);
if (fds > origfds) {
printf("Failed: number of open descriptors was increased\n");
return 1;
}
return 0;
}