Arhn - архитектура программирования

Как получить дескриптор файла в node.js, если вы открываете файл с помощью openSync

Я заметил, что может быть большой проблемой для openSync, когда вы открываете файл с помощью openSync, вы не получаете дескриптор файла. Вы получаете его в качестве аргумента для обратного вызова только в том случае, если вы открываете асинхронный вызов. Проблема в том, что вы ДОЛЖНЫ иметь дескриптор файла, чтобы закрыть файл! Есть и другие вещи, которые программист может захотеть сделать с файлом, для которого вам также нужен файловый дескриптор.

Казалось бы значительным упущением в fs API для node.js не предоставить способ получить доступ к переменной fd, которую возвращает обратный вызов при открытии в асинхронном режиме, если вы открываете с помощью синхронных вызовов. По сути, это сделало бы синхронное открытие непригодным для большинства приложений.

Я действительно не хочу использовать асинхронный файл, который открывается и закрывается позже в моей разработке, если я могу этого избежать, есть ли способ получить переменную fd, которая мне нужна, чтобы успешно закрыть файл при использовании синхронного открытия?


Ответы:


1

Что еще вы получите от openFileSync, кроме файлового дескриптора?

var fs = require('fs')
var path = require('path')
var fd = fs.openSync(path.join(process.cwd(), 'log.txt'), 'a')
fs.writeSync(fd, 'contents to append')
setTimeout(function () {
  console.log('closing file now')
  fs.closeSync(fd)
}, 10000)

Запуск lsof /path/to/log.txt во время работы приведенного выше сценария узла и повторный запуск lsof /path/to/log.txt после завершения сценария показывает, что файл закрывается правильно.

Тем не менее, чего вы пытаетесь достичь, открывая файл? Возможно, есть лучший способ, например, потоковая передача для вашей конкретной ситуации.

19.04.2013
  • Спасибо за быстрый ответ! Использовал ваш пример, и вы правы, он работает как шарм. Имеет смысл, что он вернет fd после openSync, API просто не сказал об этом явно, и я не подумал попробовать, прежде чем публиковать вопрос. Я просто пытаюсь записать некоторые временные данные в файл для теста в моей системе, я парень C/C++, пытающийся разобраться в node.js самостоятельно, и файлы мне знакомы, но я пойду проверю потоки по вашему предложению, чтобы посмотреть, могут ли они лучше подойти мне в node. Спасибо еще раз! 19.04.2013
  • Без проблем. Документы node.js по большей части хороши. Иногда, хотя они предполагают большую часть читателя и немного урезаны 19.04.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..