added startChildren() in main/fart module, soon to be replaced with a straight fork() call
git-svn-id: svn://anubis/fart/trunk@244 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
parent
a82110ab24
commit
f6c6e8ec36
@ -29,6 +29,8 @@ class distrib
|
||||
int send_data(int task, unsigned char * data, int num_bytes);
|
||||
int getNumTasksInProgress() { return m_tasks_in_progress.size(); }
|
||||
void waitAllTasks();
|
||||
std::string & getServerName() { return m_servername; }
|
||||
int getServerPort() { return m_serverport; }
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
48
main/fart.cc
48
main/fart.cc
@ -1,7 +1,7 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <unistd.h> /* sysconf() */
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/time.h> /* gettimeofday() */
|
||||
@ -26,6 +26,40 @@ void usage(const char * progname)
|
||||
exit(42);
|
||||
}
|
||||
|
||||
void startChildren(const string & servername,
|
||||
int serverport,
|
||||
const vector<string> options)
|
||||
{
|
||||
char server_port_str[15];
|
||||
sprintf(server_port_str, "%d", serverport);
|
||||
|
||||
vector<string> args;
|
||||
args.push_back("fart");
|
||||
args.push_back("--child");
|
||||
args.push_back("--host");
|
||||
args.push_back(servername);
|
||||
args.push_back("--port");
|
||||
args.push_back(server_port_str);
|
||||
for (int i = 0, sz = options.size(); i < sz; i++)
|
||||
args.push_back(options[i]);
|
||||
const char * char_star_args[args.size() + 1];
|
||||
for (int i = 0, sz = args.size(); i < sz; i++)
|
||||
char_star_args[i] = args[i].c_str();
|
||||
char_star_args[args.size()] = (char *) NULL;
|
||||
|
||||
int num_children = sysconf(_SC_NPROCESSORS_CONF);
|
||||
|
||||
for (int i = 0; i < num_children; i++)
|
||||
{
|
||||
int id = fork();
|
||||
if (id == 0)
|
||||
{
|
||||
/* child process */
|
||||
execvp("fart", (char * const *) char_star_args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
int opt;
|
||||
@ -39,6 +73,7 @@ int main(int argc, char * argv[])
|
||||
int server_port = 0;
|
||||
unsigned char * data = NULL;
|
||||
const char * output_file_name = "fart.bmp";
|
||||
bool child = false;
|
||||
|
||||
static const struct option long_options[] = {
|
||||
{ "output-file", required_argument, NULL, 'o' },
|
||||
@ -51,6 +86,7 @@ int main(int argc, char * argv[])
|
||||
{ "host", required_argument, NULL, 257 },
|
||||
{ "port", required_argument, NULL, 258 },
|
||||
{ "hosts", required_argument, NULL, 259 },
|
||||
{ "child", no_argument, NULL, 260 },
|
||||
{ NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
@ -103,6 +139,9 @@ int main(int argc, char * argv[])
|
||||
hosts_file = optarg;
|
||||
distributed = true;
|
||||
break;
|
||||
case 260:
|
||||
child = true;
|
||||
break;
|
||||
default:
|
||||
usage(argv[0]);
|
||||
break;
|
||||
@ -162,6 +201,13 @@ int main(int argc, char * argv[])
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!child)
|
||||
{
|
||||
startChildren(the_distrib.getServerName(),
|
||||
the_distrib.getServerPort(),
|
||||
client_options);
|
||||
}
|
||||
|
||||
the_distrib.startClient(server_name, server_port);
|
||||
|
||||
unsigned char data[3 * UNIT_TASK_SIZE];
|
||||
|
Loading…
x
Reference in New Issue
Block a user