Вы всегда можете создать два исполняемых файла из источников. У каждого из них будет свой main
.
Или вы можете создать один исполняемый файл и разрешить ему fork
другой процесс или создать другой поток. При создании нового потока вы укажете вторую функцию "main" как функцию потока.
Когда fork
-ing, вы должны создать две функции main_server
и main_client
и позволить фактическому main
решить, какую из них вызывать, сразу после fork
. Смотри фрагмент:
int main_server(int argc, int argv){
//TODO: complete
return 0;
}
int main_client(int argc, int argv){
//TODO: complete
return 0;
}
int main(int argc, int argv){
//TODO: parse args and get argv_server, argv_client, argc_server, argc_client
int pid = fork();
if (pid < 0) {
//TODO: handle error and leave
} else if (pid) {
// start client here for example
main_client(argc_client, argv_client);
} else {
main_server(argc_server, argv_server);
wait(pid);
}
return 0;
/* TODO: each of the above calls should be checked for errors */
}
Надеюсь, это поможет.
Примечание: лучше создать отдельный исполняемый файл, но если вам нужен только один, используйте приведенный выше фрагмент.