Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Очистить свободное прстранство.  (Прочитано 4215 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн anonimus

  • Активист
  • *
  • Сообщений: 592
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #15 : 16 Марта 2010, 10:08:43 »
Шайтан :)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #16 : 16 Марта 2010, 10:13:41 »
У волшебника Сулеймана все по-честному, без обмана. ;D
Для начала скрипт, чтобы не подумали, что я схимичил.
#! /bin/sh
rm ./myfile
echo "Убедимся, что все чисто"
ls -l ./myfile
echo "Сколько свободного места"
df ~
date
echo "Запишем 1G"
./a.out
date
echo "Убедимся, что записали 1G"
ls -l ./myfile
echo "Сколько свободного места"
df ~
echo "Вот она магия!"

Оффлайн ploop

  • Активист
  • *
  • Сообщений: 762
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #17 : 16 Марта 2010, 11:07:27 »
Так, маги, а что такое a.out ?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #18 : 16 Марта 2010, 11:14:40 »
Ну вот и добрались до сути. 8)

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

#define HOLE_SIZE (1024*1024*1024*1)

int main (void)
{
       int fd = creat ("myfile", 0640);
       if (fd == -1) {
              fprintf (stderr, "Cannot open file\n");
              return 1;
       }

       write (fd, "AAA", 3);
       if (lseek (fd, HOLE_SIZE, SEEK_END) == -1) {
              fprintf (stderr, "Cannot set I/O position\n");
              return 1;
       }

       write (fd, "BBB", 3);
       close (fd);
       return 0;
}

В масдае будет создан файл размером 1G. И фокус не получится.
В лине "черная дыра" не запишется. А читаться будет нулями.

Оффлайн ploop

  • Активист
  • *
  • Сообщений: 762
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #19 : 16 Марта 2010, 11:25:09 »
В сях не очень... записать ААА, переместить указатель на 1Gb и записать BBB? Правильно?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #20 : 16 Марта 2010, 11:28:51 »
Да, все верно.
Теперь об источнике.
Книга. Николай Иванов. Программирование в Linux.
Замечательная книга.

Оффлайн ploop

  • Активист
  • *
  • Сообщений: 762
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #21 : 16 Марта 2010, 11:35:40 »
Цитировать
В лине "черная дыра" не запишется. А читаться будет нулями.
А почему так происходит? По сути какая разница - у файла есть начало, есть конец, что там внутри пофиг. Или это особенность ФС?

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #22 : 16 Марта 2010, 11:44:05 »
Линь для бинарных файлов запишет только те кусочки, которые надо записать.
Ничего лишнего, только бизнес. 8)

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #23 : 16 Марта 2010, 11:51:46 »
Это наверное хорошо пригодится на случай, допустим когда качается большой файл с разных позиций.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Очистить свободное прстранство.
« Ответ #24 : 16 Марта 2010, 11:54:52 »
Вы правы.
Торренты без этого механизма много проиграют.

Оффлайн higet7

  • Автор темы
  • Активист
  • *
  • Сообщений: 379
    • Просмотр профиля
    • Сосудистая Нейрохирургия
Re: Очистить свободное прстранство.
« Ответ #25 : 20 Марта 2010, 22:23:43 »
это настоящая уличная магия

 

Страница сгенерирована за 0.037 секунд. Запросов: 23.