Пример #1
0
int main(int argc, char **argv) {


    int sfiford;
    int sfifowr;
    int mfiford;
    int mfifowr;
    double x;

    int opID;
    double param;
    int i;
    int iWaitTime = 5;
    int iParams;
    int iLookedUp;
    struct result res;
    FILE *fPids;
    pid_t clientpid;

    initSignals();
    if(argc > 16) {
        fprintf(stderr, "You can enter maximum 16 command-line arguments");
        exit(1);
    }

    if(argc < 6) {
        fprintf(stderr, "You cannot enter less than 6 command-line arguments");
        exit(1);
    }

    fPids = fopen(PIDS, "a");
    fprintf(fPids, "%d\n", getpid());
    fclose(fPids);

    sprintf(sMainFifoName, "%s", &argv[1][1]);
    mkfifo(sMainFifoName, 0666);
    iWaitTime = atoi(&argv[2][1]);
    opID = atoi(&argv[3][1]);
    iLookedUp = 4;

    switch(opID) {
    case 1:
        res.opId = 1;
        break;
    case 2:
        res.opId = 2;
        break;
    case 3:
        res.opId = 3;
        break;
    case 4:
        res.opId = 4;
        break;
    default:
        fprintf(stderr, "Usage: You cannot enter less than 1 and grater that 4 as operation.\n");
        exit(1);
    }
    iParams = getParamNum(opID);
    clientpid = getpid();

    mfifowr = open(sMainFifoName, O_WRONLY);
    if (write(mfifowr, &clientpid, sizeof(clientpid)) < 0 || write(mfifowr, &opID, sizeof(opID)) < 0 || write(mfifowr, &iWaitTime, sizeof(iWaitTime)) < 0) {
        perror("write op");
        quit(EXIT_FAILURE);
    }
    close(mfifowr);

    mfiford = open(sMainFifoName, O_RDONLY);
    if(read(mfiford, &sspid, sizeof(sspid)) < 0 ||read(mfiford, &serverpid, sizeof(serverpid)) < 0 || read(mfiford, sServerFifoName, sizeof(sServerFifoName)) < 0) {
        perror("read client fifo");
        quit(EXIT_FAILURE);
    }
    close(mfiford);

    snprintf(sLogFileName, MAX, LOG_FILE_NAME, (long)serverpid);
    fprintf(stdout, "client got pid and sServerFifoName name from main fifo: %d, %s\n", serverpid, sServerFifoName);

    mkfifo(sServerFifoName, 0666);

    while(iLookedUp + iParams <= argc) {
        sfifowr = open(sServerFifoName, O_WRONLY);
        fprintf(stdout, "Sending parameters to math-server ");
        for(i = 0; i < iParams; ++i) {
            param = (double) atoi(&argv[iLookedUp++][1]);
            if(write(sfifowr, &param, sizeof(param)) < 0) {
                perror("write client fifo");
                quit(EXIT_FAILURE);
            }
            fprintf(stdout, "%f ", param);
        }
        fprintf(stdout, "\n");
        close(sfifowr);

        sfiford = open(sServerFifoName, O_RDONLY);
        if(read(sfiford, &res, sizeof(res)) < 0) {
            perror("read server fifo");
            quit(EXIT_FAILURE);
        }
        close(sfiford);

        if(handlerflag != 1) {
            appendLog(sLogFileName, serverpid, sServerFifoName);
            writeResultsToLog(sLogFileName, &res);
            writeResultsToConsole(&res);
        }
        else
            handlerflag = 0;

    }
    sfifowr = open(sServerFifoName, O_WRONLY);
    x = -9999.0;
    write(sfifowr, &x, sizeof(x));
    close(sfifowr);
    unlink(sServerFifoName);
    return 0;
}
Пример #2
0
//This function outputs Prno2Vreg after Dex register allocation.
bool DexRegion::process(OptCtx * oc)
{
    if (getIRList() == NULL) { return true; }
    OC_show_comp_time(*oc) = g_show_comp_time;

    g_indent = 0;
    if (!g_silence) {
        LOG("DexRegion process %s", getRegionName());
    }
    //note("\n==---- REGION_NAME:%s ----==", getRegionName());
    prescan(getIRList());

    PassMgr * passmgr = initPassMgr();

    HighProcess(*oc);

    MiddleProcess(*oc);

    ASSERT0(getPassMgr());
    PRSSAMgr * ssamgr = (PRSSAMgr*)passmgr->queryPass(PASS_PR_SSA_MGR);
    if (ssamgr != NULL && ssamgr->isSSAConstructed()) {
        ssamgr->destruction();
    }

    if (!g_retain_pass_mgr_for_region) {
        //Destroy PassMgr.
        destroyPassMgr();
    }

    if (!is_function()) { return true; }

    ///////////////////////////////////////
    //DO NOT REQUEST PASS AFTER THIS LINE//
    ///////////////////////////////////////

    BBList * bbl = getBBList();
    if (bbl->get_elem_count() == 0) { return true; }

    ASSERT0(verifyIRandBB(bbl, this));

    RefineCtx rf;
    RC_insert_cvt(rf) = false; //Do not insert cvt for DEX code.
    refineBBlist(bbl, rf);
    ASSERT0(verifyIRandBB(bbl, this));

    if (g_do_dex_ra) {
        Prno2Vreg * original_prno2vreg = getDex2IR()->getPR2Vreg();
        RA ra(this,
              getTypeIndexRep(),
              getParamNum(),
              getOrgVregNum(),
              getDex2IR()->getVreg2PR(),
              original_prno2vreg,
              &m_var2pr);
        LOG("\t\tdo DEX Register Allcation for '%s'", getRegionName());
        ra.perform(*oc);
        updateRAresult(ra, *getPrno2Vreg());
    } else {
        //Do not allocate register.
        getPrno2Vreg()->clean();
        getPrno2Vreg()->copy(*getDex2IR()->getPR2Vreg());
    }

    return true;
}