C: problema con la configuración de límite suave mediante RLIMIT_FSIZE

Estaba leyendo las Páginas del manual sobre getrlimt / setrlimit y estaba siguiendo los ejemplos en consecuencia.

Estoy tratando de establecer el límite “suave”, pero cuando lo configuro y lo imprimo, sale completamente incorrecto.

Ejemplos: establezco el límite suave a 50, obtengo el límite suave es 219030298624. Establecí el límite suave a 100, obtengo el límite suave es 42953954893824. Establecí el límite suave a 100000 como se indica en el código a continuación y obtengo lo mismo que el anterior.

Que esta pasando?

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 no devuelve el valor actual. getrlimit llamar a getrlimit después de configurar el valor para recuperar el valor actual.

  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); 

O puede usar prlimit para establecer y obtener en una llamada http://linux.die.net/man/2/prlimit

%llu no es necesariamente un especificador de formato válido para rlim_t . Esta es la fuente de los enormes valores sin sentido; estás invocando UB pasando tipos no coincidentes a printf . Reparto long long y long long y el valor impreso debe ser correcto.