私は65KBにデータサイズを制限し、それを確認する簡単なプログラムを書いています。私は65KB以上のダミーメモリを割り当てています。失敗するはずですね。setrlimitによって制限されていないプロセスリソース
The soft limit is 4294967295
The hard limit is 4294967295
The soft limit is 66560
The hard limit is 66560
core file size (blocks, -c) 0
data seg size (kbytes, -d) 65
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14895
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 14895
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
success
は、私がどのような方法で間違ってやっている -
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main (int argc, char *argv[])
{
struct rlimit limit;
/* Get max data size . */
if (getrlimit(RLIMIT_DATA, &limit) != 0) {
printf("getrlimit() failed with errno=%d\n", errno);
return 1;
}
printf("The soft limit is %lu\n", limit.rlim_cur);
printf("The hard limit is %lu\n", limit.rlim_max);
limit.rlim_cur = 65 * 1024;
limit.rlim_max = 65 * 1024;
if (setrlimit(RLIMIT_DATA, &limit) != 0) {
printf("setrlimit() failed with errno=%d\n", errno);
return 1;
}
if (getrlimit(RLIMIT_DATA, &limit) != 0) {
printf("getrlimit() failed with errno=%d\n", errno);
return 1;
}
printf("The soft limit is %lu\n", limit.rlim_cur);
printf("The hard limit is %lu\n", limit.rlim_max);
system("bash -c 'ulimit -a'");
int *new2 = NULL;
new2 = malloc(66666666);
if (new2 == NULL)
{
printf("malloc failed\n");
return;
}
else
{
printf("success\n");
}
return 0;
}
驚くべきことに、出力に含まはこのようなものでしょうか? 入力を削除してください。 ありがとう!
「mallocが失敗しました」メッセージの後のベアリターンは、1(またはゼロ以外の値)を返すように固定する必要があります。 –
私はubntu linux 14を実行しています。04 amd64で8ギガのRAMを使用し、gccを使ってコンパイルするには-Wall -Wextra -pedantic -std-c99というパラメータを使用します。これにより、コンパイラは次の3つの警告を出力します。 1)行41:9:警告:戻り値なしの戻り値、戻り値なしvoid 2)未使用パラメーターargc 3)未使用パラメーターargv。実行時の問題について質問するときは、常にきれいにコンパイルするコードを投稿してください。 – user3629249