Может ли madvise(addr, size, MADV_DONTNEED) вызывать сбои сегментации?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Может ли madvise(addr, size, MADV_DONTNEED) вызывать сбои сегментации?

Сообщение Anonymous »

Является ли madvise(*, *, MADV_DONTNEED) чисто рекомендательным? Я пробовал сканировать /proc/self/maps и вызывать на них madvise(addr, size, MADV_DONTNEED):

Код: Выделить всё

#include 
#include 

int main(void) {
FILE *fp;
char line[1024];

fp = fopen("/proc/self/maps", "r");
if (fp == NULL) {
perror("Failed to open maps file");
return 1;
}

while (fgets(line, sizeof(line), fp)) {
char addr[32], perms[8], offset[32], dev[32], inode[32], path[256];
unsigned long start, end;

path[0] = '\0';
sscanf(line, "%lx-%lx %s %s %s %s %[^\n]", &start, &end, perms, offset, dev, inode, path);

int ret = madvise((void*)start, end - start, MADV_DONTNEED);
if(ret == 0)
printf("  OK\n");
else
printf("  Error\n");
fflush(stdout);
}

fclose(fp);
}
Но это печатает:

Код: Выделить всё

  OK
OK
OK
OK
Segmentation fault
Есть ли простой способ определить (из /proc/self/maps, /proc/self/smaps или иначе), какие сегменты памяти принадлежат процессу разрешено ли вызывать madvise(*, *, MADV_DONTNEED)?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -segfaults
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»