Резервную копию в простом формате можно восстановить с помощью инструмента, подобного psql , который поддерживает специальный протокол для передачи данных. Так что самый простой способ - запустить psql из скрипта.
Если вы хотите реализовать то же поведение без psql , вам нужно разделить файл и извлечь данные, которые должны быть отправлены, используя copy_expert()
. Это не сложно, но нужно немного поработать.
использование старого файла стиля io
fopen файл для записи.
fseek к желаемому размеру файла - 1.
fwrite единственный байт
fclose файл
Самый быстрый способ создать файл определенного размера состоит в том, чтобы просто создать использование файла нулевой длины creat()
или open()
и затем измените использование размера chsize()
. Это просто выделит блоки на диске для файла, содержание должно будет что бы ни случилось быть в тех блоках. Это очень быстро, так как никакая буферная запись не должна происходить.
Не уверенный я понимаю вопрос. Вы хотите удостовериться, что каждый символ в файле является печатаемым символом ASCII? Если так, что относительно этого? Заполняет файл "abcdefghabc...."
#include <stdio.h>
int main ()
{
const int FILE_SiZE = 50000; //size in KB
const int BUFFER_SIZE = 1024;
char buffer [BUFFER_SIZE + 1];
int i;
for(i = 0; i < BUFFER_SIZE; i++)
buffer[i] = (char)(i%8 + 'a');
buffer[BUFFER_SIZE] = '\0';
FILE *pFile = fopen ("somefile.txt", "w");
for (i = 0; i < FILE_SIZE; i++)
fprintf(pFile, buffer);
fclose(pFile);
return 0;
}
Вы не упомянули операционную систему, но я предполагаю, что create / open / close / write доступны.
Для действительно эффективной записи и, скажем, 4k страницы и блока диска размер и повторяющаяся строка:
Это обходит буферизацию fopen () и друзей, что хорошо и плохо: их буферизация означает, что они хороши и быстры, но они все еще не будут столь же эффективны, как эта, которая не требует дополнительных затрат на работу с буфером.