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 send_data(int task, unsigned char * data, int num_bytes);
|
||||||
int getNumTasksInProgress() { return m_tasks_in_progress.size(); }
|
int getNumTasksInProgress() { return m_tasks_in_progress.size(); }
|
||||||
void waitAllTasks();
|
void waitAllTasks();
|
||||||
|
std::string & getServerName() { return m_servername; }
|
||||||
|
int getServerPort() { return m_serverport; }
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
48
main/fart.cc
48
main/fart.cc
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h> /* sysconf() */
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <sys/time.h> /* gettimeofday() */
|
#include <sys/time.h> /* gettimeofday() */
|
||||||
@ -26,6 +26,40 @@ void usage(const char * progname)
|
|||||||
exit(42);
|
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 main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
int opt;
|
int opt;
|
||||||
@ -39,6 +73,7 @@ int main(int argc, char * argv[])
|
|||||||
int server_port = 0;
|
int server_port = 0;
|
||||||
unsigned char * data = NULL;
|
unsigned char * data = NULL;
|
||||||
const char * output_file_name = "fart.bmp";
|
const char * output_file_name = "fart.bmp";
|
||||||
|
bool child = false;
|
||||||
|
|
||||||
static const struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
{ "output-file", required_argument, NULL, 'o' },
|
{ "output-file", required_argument, NULL, 'o' },
|
||||||
@ -51,6 +86,7 @@ int main(int argc, char * argv[])
|
|||||||
{ "host", required_argument, NULL, 257 },
|
{ "host", required_argument, NULL, 257 },
|
||||||
{ "port", required_argument, NULL, 258 },
|
{ "port", required_argument, NULL, 258 },
|
||||||
{ "hosts", required_argument, NULL, 259 },
|
{ "hosts", required_argument, NULL, 259 },
|
||||||
|
{ "child", no_argument, NULL, 260 },
|
||||||
{ NULL, 0, NULL, 0 }
|
{ NULL, 0, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -103,6 +139,9 @@ int main(int argc, char * argv[])
|
|||||||
hosts_file = optarg;
|
hosts_file = optarg;
|
||||||
distributed = true;
|
distributed = true;
|
||||||
break;
|
break;
|
||||||
|
case 260:
|
||||||
|
child = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
break;
|
break;
|
||||||
@ -162,6 +201,13 @@ int main(int argc, char * argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (!child)
|
||||||
|
{
|
||||||
|
startChildren(the_distrib.getServerName(),
|
||||||
|
the_distrib.getServerPort(),
|
||||||
|
client_options);
|
||||||
|
}
|
||||||
|
|
||||||
the_distrib.startClient(server_name, server_port);
|
the_distrib.startClient(server_name, server_port);
|
||||||
|
|
||||||
unsigned char data[3 * UNIT_TASK_SIZE];
|
unsigned char data[3 * UNIT_TASK_SIZE];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user