Файловий інтерфейс без фізичного запису до файлової системи


1

У проекті, над яким я працюю, у мене взаємодіють два процеси Windows 7:

  • процес A - стороння послуга із закритим кодом, що завантажує файли з жорсткого диска
  • процес B - внутрішній процес, який створює ці файли та записує їх на жорсткий диск

Поточне налаштування працює як очікувалося, однак це порушує одну з бізнес-вимог - нам не дозволяється створювати тимчасові файли під час обробки даних.

У Linux я міг створити "файл файлу" TMP_FILE з mkfifo і використовувати його як буфер між цими процесами замість запису у файлову систему. Що стосується Windows - я повністю втрачений.

Питання:

Як у Windows 7 можна виконати вимогу не створювати тимчасові файли на диску, коли процес, який я не можу змінити, може читати лише з файлів?

Додаткова інформація:

  • процес A отримує XML-повідомлення з іменами файлів для обробки
  • процес B є лише прототипом і може бути модифікований будь-яким необхідним способом
  • вихідні дані надсилаються через SCP з сервера Linux і отримуються процесом B, протокол може бути змінено, якщо це допоможе

2
Чи є вимога "жодних файлів на диску" чи "файлів немає взагалі "? Якщо на диску немає файлів, можливо, якесь програмне забезпечення для диска?
Мокубай

Диск @Mokubai Ram - це врахування, але ми також шукаємо альтернативи, які з оподаткування менш податкові.
шановний Lapwing

1
Я знаю, що Windows має іменовані труби, які дуже схожі на те, що ви шукаєте.
Мокубай

@ Mokubai ♦ Так, це набагато більше схоже на те, що я шукав, дякую. Дивно, що я не знайшов його під час пошуку "mkfifo for linux".
шановний Lapwing

Відповіді:


1

Еквівалент Windows того, що ви просите, схоже, називається названою трубою

Названі труби неможливо встановити у звичайній файловій системі, на відміну від Unix. Також, на відміну від своїх аналогів Unix, названі труби є летючими (видаляються після закриття останнього посилання на них). Кожна труба розміщується в кореневому каталозі іменованої файлової системи трубопроводу (NPFS), встановленої під спеціальним контуром \\.\pipe\(тобто труба під назвою "foo" мала б повну назву шляху \\.\pipe\foo). Анонімні труби, які використовуються в трубопроводі, насправді називають трубами з випадковою назвою.

Документацію для названих труб можна знайти в MSDN

Як насправді реалізувати це, було б поза рамками для SuperUser, але на Stack Overflow є приклади


Крім того, на мій коментар вище, якщо ви хочете швидкості оперативної пам'яті, але з будь-якої причини хочете "справжню файлову систему", є також можливість використання Ramdisk. Залежно від кількості та розміру файлів існує Dataram Ramdisk або його фірмовий спінофф AMD Radeon Ramdisk. Я вважаю, що у безкоштовних версіях вони обмежені 2 Гб.

У Вікіпедії є досить вичерпний перелік програмного забезпечення Ramdisk


Мені потрібно перевірити, чи буде процес працювати з трубами, але з його вигляду я майже впевнений, що це буде. Я прийму вашу відповідь, як тільки я зрозумію. Ще раз дякую
Шановний Lapwing

Ми все одно будемо використовувати диск оперативної пам’яті, оскільки ми виявили, що сторона, з якою ми працюємо, генерує багато темп-файлів. Тим не менш, ваша відповідь була дуже корисною на освітньому рівні :)
Почесний Lapwing

Я додав Ramdisk як потенційне рішення у своїй відповіді.
Мокубай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.