Angular 6 numberlyly директива не работает

Неправильно сочетаются буферизованные и небуферизованные функции ввода-вывода. Такая комбинация должна выполняться очень тщательно, особенно когда код должен быть переносимым. (и плохо писать неуправляемый код ...) Конечно, лучше избегать объединения буферизованного и небуферизованного ввода-вывода в один и тот же файловый дескриптор.

Буферизованный IO: fprintf(), fopen(), fclose(), freopen() ...

Небуферизованный IO: write(), open(), close(), dup() ...

Когда вы используете dup2() для перенаправление stdout. Функция не знает буфер, который был заполнен fprintf(). Поэтому, когда dup2() закрывает старый дескриптор 1, он не очищает буфер и содержимое может быть сброшено на другой выход. В вашем случае 2a оно было отправлено на /dev/null.

Решение

В вашем случае лучше использовать freopen() вместо dup2(). Это решает все ваши проблемы:

  1. Сбрасывает буферы исходного потока FILE. (случай 2a)
  2. Он устанавливает режим буферизации в соответствии с вновь открытым файлом. (случай 3)

Вот правильная реализация вашей функции:

void RedirectStdout2File(const char* log_path) {
    if(freopen(log_path, "a+", stdout) == NULL) err(EXIT_FAILURE, NULL);
}

К сожалению, с буферизованным IO вы не можете напрямую устанавливать разрешения для вновь созданного файла. Вы должны использовать другие вызовы для изменения разрешений или использовать неперехваченные расширения glibc. См. fopen() man page .

1
задан Niladri Banerjee - Uttarpara 17 January 2019 в 11:08
поделиться

1 ответ

Когда вы используете пользовательскую директиву / pipe в совместно используемом модуле, вам также необходимо экспортировать ее.

По сути, в вашем уроке он создал директиву и объявил ее в модуле приложения. Но в вашем примере вы помещаете свою директиву в общий модуль, поэтому вам нужно поместить свою директиву в скобки объявлений, а также в экспорт.

shared.module.ts :

@NgModule({
    /* ... */
    declarations: [YourDirective],
    exports: [YourDirective]
    /* ... */
})
0
ответ дан JStw 17 January 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: