Определите, выходит ли часть кода из программы с MSVC - PullRequest
0 голосов
/ 01 июля 2010

В системе Gnu я могу написать макрос C, например, dies_ok (), который будет разворачивать новый процесс, запускать фрагмент кода, после чего он может записывать в общий фрагмент памяти, который он не завершил, затемв родительском процессе я могу определить, вышел ли он или нет.Это полезно для тестов:

dies_ok({int x = 0/0;}, "can't divide by zero");
lives_ok({int x = 3/7;}, "this is a perfectly fine statement");
dies_ok({abort();}, "abort kills the program");

Есть ли способ сделать это на MSVC, где нет функции fork?

EDIT: Вот реализация, которая работает на Linux с gcc: http://github.com/zorgnax/libtap/blob/master/tap.h

1 Ответ

1 голос
/ 01 июля 2010

CreateProcess похож на fork () / exec ()

Библиотека BOOST имеет поддержку разделяемой памяти для msvc.Вы также можете использовать таблицу атомов Windows, которая является родной для Windows - см. Msdn для

http://msdn.microsoft.com/en-us/library/ms649053(VS.85).aspx

В: Я не понимаю, почему в Unix вы должны написать строку в sharedобъем памяти.Вы можете просто вызвать exit (n) из дочернего процесса, где n - это индекс в заранее определенный список кодов ошибок или кодов успеха char * p [].Вы можете иметь массив из 255 значений, исключая 0 для EXIT_SUCCESS.Или прочитайте заголовочный файл sysexits.h для другого набора идей.wait () или waitpid () вернут код завершения или определят, не завершился ли процесс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...