blob: 6e85222b50edeb03fe7ccc9219ab174dcf626dcf [file] [log] [blame]
#ifndef _PRAGMA_COPYRIGHT_
#define _PRAGMA_COPYRIGHT_
#pragma comment(copyright, "%Z% %I% %W% %D% %T%\0")
#endif /* _PRAGMA_COPYRIGHT_ */
/****************************************************************************
* Copyright (c) 2008, 2010 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0s
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
Classes: None
Description: Distributed Shell.
Author: Nicole Nie, Tu HongJ, Liu Wei
History:
Date Who ID Description
-------- --- --- -----------
10/06/08 nieyy Initial code (D153875)
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include "sci.h"
#define RST_SIZE 4096
char *result = NULL;
void handler(void *user_param, sci_group_t group, void *buffer, int size)
{
int bytes, my_id, rc;
FILE *fp = NULL;
int sizes[2];
void *bufs[2];
rc = SCI_Query(BACKEND_ID, &my_id);
if (rc != SCI_SUCCESS) {
exit(1);
}
bufs[0] = &my_id;
sizes[0] = sizeof(my_id);
fp = popen((const char *)buffer, "r");
assert(result != NULL);
memset(result, 0, RST_SIZE);
bytes = fread(result, sizeof(char), RST_SIZE, fp);
bufs[1] = result;
sizes[1] = strlen(result) + 1;
pclose(fp);
rc = SCI_Upload(SCI_FILTER_NULL, group, 2, bufs, sizes);
if (rc != SCI_SUCCESS) {
exit(1);
}
}
int main(int argc, char **argv)
{
sci_info_t info;
int rc;
result = (char *)malloc(RST_SIZE * sizeof(char));
bzero(&info, sizeof(info));
info.type = SCI_BACK_END;
info.be_info.mode = SCI_POLLING;
info.be_info.hndlr = (SCI_msg_hndlr *)&handler;
info.be_info.param = NULL;
rc = SCI_Initialize(&info);
if (rc != SCI_SUCCESS) {
exit(1);
}
do {
rc = SCI_Poll(-1);
} while (rc == SCI_SUCCESS);
rc = SCI_Terminate();
free(result);
return rc;
}