C: Problème lors de la définition de la limite souple à l’aide de RLIMIT_FSIZE

Je lisais les pages de manuel sur getrlimt / setrlimit et je suivais les exemples en conséquence.

J’essaie de définir la limite “souple”, mais lorsque je la fixe et l’imprime, le résultat est complètement faux.

Exemples: je fixe la limite souple à 50, je reçois. La limite souple est 219030298624. Je fixe la limite souple à 100, je reçois La limite souple est 42953954893824. Je fixe la limite souple à 100000 comme indiqué dans le code ci-dessous et je reçois la même chose que ci-dessus.

Que se passe-t-il?

struct rlimit limit; getrlimit (RLIMIT_FSIZE, &limit); limit.rlim_cur = 100000; setrlimit (RLIMIT_FSIZE, &limit); struct rlimit rl; getrlimit (RLIMIT_CPU, &rl); rl.rlim_cur = 1; setrlimit (RLIMIT_CPU, &rl); printf("The soft limit is %llu\n", limit.rlim_cur); 

setrlimit ne setrlimit pas la valeur actuelle. Vous devez appeler getrlimit après avoir défini la valeur pour récupérer la valeur actuelle.

  struct rlimit rl; getrlimit (RLIMIT_CPU, &rl); rl.rlim_cur = 1; setrlimit (RLIMIT_CPU, &rl); getrlimit (RLIMIT_CPU, &rl); printf("The soft limit is %llu\n", rl.rlim_cur); 

Ou vous pouvez utiliser prlimit pour établir et vous prlimit en un seul appel http://linux.die.net/man/2/prlimit

%llu n’est pas nécessairement un spécificateur de format valide pour rlim_t . C’est la source des énormes valeurs absurdes; vous appelez UB en transmettant à printf types non concordants. Cast to long long et la valeur imprimée doit être correcte.