C C  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Файлы и стандартный ввод-вывод

Тест рассматривает `FILE` как поток с собственным состоянием и буфером, а не просто как «указатель на файл»: режимы открытия, сброс буфера и закрытие, короткие чтения, конец файла и ошибка, а также связь стандартного ввода-вывода с системными вызовами.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет вывод, часть — поиск дефекта, переносимость и безопасное исправление. После завершения откроются объяснения и профиль по 5 темам.
Вопрос 1 из 25
Что возвращает fopen при отказе?
CC17
FILE *f=fopen(path,"r");
if(!f){...}
Вопрос 2 из 25
Чем `fwrite` с коротким возвратом отличается от `fwrite` с возвратом нуля и установленным `ferror`?
Вопрос 3 из 25
Можно ли использовать FILE* после успешного fclose?
Вопрос 4 из 25
Что делает вызов `rewind(f)` с позицией и индикаторами состояния потока?
CC17
rewind(f);
Вопрос 5 из 25
Почему опасно смешивать fread и read(fileno(f),...) без синхронизации?
Вопрос 6 из 25
Что произойдёт с существующим содержимым файла после успешного открытия в режиме `w`?
CC17
FILE *f=fopen(path,"w");
Вопрос 7 из 25
Чем "a" отличается от "w"?
Вопрос 8 из 25
Что означает режим `r+` в показанном вызове `fopen`?
CC17
FILE *f=fopen(path,"r+");
Вопрос 9 из 25
Зачем добавлять символ `b` в режим открытия файла на системах, где различаются текстовые и двоичные потоки?
Вопрос 10 из 25
Как безопаснее заменить конфигурационный файл целиком?
Вопрос 11 из 25
Что делает fflush на вывод stream?
CC17
if(fflush(out)==EOF) ...
Вопрос 12 из 25
При каком назначении `stdout` реализация часто выбирает строковую буферизацию?
Вопрос 13 из 25
Почему `printf("hello"); fork();` может дать двойной вывод в файл?
CC17
printf("hello");
pid_t p=fork();
exit(0);
Вопрос 14 из 25
Допустим ли `fflush(stdin)` как переносимая очистка ввода?
Вопрос 15 из 25
В какой момент допустимо вызывать `setvbuf` для только что открытого потока?
CC17
FILE *f=fopen(path,"w");
setvbuf(f,buf,_IOFBF,sizeof buf);
Вопрос 16 из 25
Что именно возвращает `fread(buf, elem_size, count, f)` в переменной `got`?
CC17
size_t got=fread(buf,elem_size,count,f);
Вопрос 17 из 25
После fread вернул меньше count. Что дальше?
Вопрос 18 из 25
Как проверить fwrite всего массива?
CC17
if(fwrite(a,sizeof *a,n,f)!=n) fail();
Вопрос 19 из 25
Почему `while(!feof(f)) { fscanf(...); }` неверно?
CC17
while(!feof(f)){ fscanf(f,"%d",&x); use(x); }
Вопрос 20 из 25
Как сохранить код исходной ошибки, если после неё нужно закрыть файлы и освободить другие ресурсы?
Вопрос 21 из 25
Что обычно покажет `strace` при выполнении этой программы со `stdio`?
CC17
FILE *f = fopen(path, "r");
char buf[4096];
size_t n;
while ((n = fread(buf, 1, sizeof buf, f)) > 0) {
    if (fwrite(buf, 1, n, stdout) != n) {
        /* обработать ошибку вывода */
        break;
    }
}
if (ferror(f)) {
    /* обработать ошибку чтения */
}
fclose(f);
Вопрос 22 из 25
Зачем hexdump при отладке текстового файла?
CC17
hexdump -C output.bin
Вопрос 23 из 25
Как воспроизвести ENOSPC для проверки?
Вопрос 24 из 25
Почему perror следует вызывать близко к отказу?
CC17
if (!f) {
    cleanup();
    perror(path);
}
Вопрос 25 из 25
Как диагностировать рассинхронизацию позиции при смешении разных интерфейсов ввода-вывода?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу