Size: a a a

2020 March 19

M

MDenis2k in pro.cxx
Александр Водянников
т.е. цепочка такая - CreateFile() -> Write() -> CloseHandle() ?
Похоже только Write() не руками пишем, а мы открытый handle передаём в CreateProcess как stdout. А так да закрываем потом CloseHandle
источник

АВ

Александр Водянников in pro.cxx
Ну тут хз - так никогда не делал.
источник

АВ

Александр Водянников in pro.cxx
А если без передачи хэндла - ну т.е. самим читать из stdout процесса и писать в файл ?
источник

АВ

Александр Водянников in pro.cxx
Возможно не закрывается
источник

АВ

Александр Водянников in pro.cxx
Ну или есть нюансы ))
источник

A

Angelina in pro.cxx
Ребят, можете порекомендовать прям хорошую книгу по изучению c++?
источник

M

MDenis2k in pro.cxx
Александр Водянников
А если без передачи хэндла - ну т.е. самим читать из stdout процесса и писать в файл ?
подозреваю что при создании процесса ему по любому нужно какой-то хендл туда дать если мы хотим чтобы вывод куда-то перенаправлялся. Мы делали в файл. Можно наверно в память как-то... Ладно будем разбираться
источник

A

Assem in pro.cxx
может кто нибудь помочь с С++ задачи по тесту?
источник

EP

Egor Pugin in pro.cxx
MDenis2k
Никто не сталкивался? Windows, процесс запускает потоки ~ по числу ядер * 2. Все нити заняты запуском внешних консольных процессов, с сохранением stdout в файлы. После запуска каждого процесса идёт попытка открыть файл в который сохранился stdout для анализа что там получилось. Проблема: Windows может до 10 минут возвращать AccessDenied на попытку открыть эти файлы с выводом (уже после того как сами процессы завершились) (если продолжать попытки долго, то в итоге файлы откроются). FlushFileBuffers() не помогает, файловые хендлы честно закрываем...
хендлы утекают=копируются в спавнящиеся процессы, либо убирай инхерит хендлс в криейт процессе, либо создавай файл с флагом без наследования (но тут fopen нельзя, тк гонка, и через второй вызов нельзя set handle flags или какой там, только через create file)
источник

M

MDenis2k in pro.cxx
Egor Pugin
хендлы утекают=копируются в спавнящиеся процессы, либо убирай инхерит хендлс в криейт процессе, либо создавай файл с флагом без наследования (но тут fopen нельзя, тк гонка, и через второй вызов нельзя set handle flags или какой там, только через create file)
Не похоже. Мы дожидаемся их завершения. И уже после того как они завершились файлы всё равно не открываются
источник

EP

Egor Pugin in pro.cxx
они же утекают?
источник

EP

Egor Pugin in pro.cxx
файл открыт в дочернем процессе
источник

EP

Egor Pugin in pro.cxx
ок, всё равно тут что-нибудь с этим
источник

AT

Andrew Titov in pro.cxx
Он открыт как stdout. Разве он при этом не закрывается автоматически?
источник

EP

Egor Pugin in pro.cxx
зависит что там за процессы, если они в свою очередь криво наспавнили и передали снова, то вот и висит
источник

АВ

Александр Водянников in pro.cxx
MDenis2k
подозреваю что при создании процесса ему по любому нужно какой-то хендл туда дать если мы хотим чтобы вывод куда-то перенаправлялся. Мы делали в файл. Можно наверно в память как-то... Ладно будем разбираться
Через CreatePipe
источник

АВ

Александр Водянников in pro.cxx
без создания самого файла
источник

АВ

Александр Водянников in pro.cxx
а дальше через ReadFile()
источник

EE

Ermuhammed Ernar in pro.cxx
Всем привет хочу сказать с какого начинать?
источник

AT

Andrew Titov in pro.cxx
Эм... что?
источник