簡體   English   中英

C ++中的Fork()和Wait()

[英]Fork() and Wait() in C++

我有一個C ++類調用fork()然后wait()s讓子進程完成,但是當我嘗試這樣做時我遇到了編譯器錯誤。

這是代碼:

#include <iostream>
#include <string>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

/* Connection class */
class Connection {
    string destination, userName, computerName;

public:
    /*  constructor for class
    You must pass it two strings. The first must be either the word "server" or the word "client".
    This will tell us which machine we want to connect to. The second will specify the username
    with which to connect to that machine.
    */
    Connection(string state, string user="default_username")
    {
        if(state == "server")
        {
            cout << "You've chosen to connect to the 'server'.\n";
            destination = "user.palmetto.clemson.edu:";
            userName = user;
            cout << "Destination: " << destination << ", Username: " << userName << "\n";
            cout << "Full connect argument: " << userName << "@" << destination << "\n";
        } else if (state == "client")
        {
            cout << "You've chosen to connect to the 'client'.\n";
            destination = "NIElaparo.ces.clemson.edu:";
            userName = user;
            cout << "Destination: " << destination << ", Username: " << userName << "\n";
            cout << "Full connect argument: " << userName << "@" << destination << "\n";
        } else
            cout << "Error. Please enter either 'server' or 'client' for first argument in Connection().\n";

      string atString = "@";
      computerName = userName + atString + destination;
    }
    /*  Send function for class
    Accepts a string as an argument which contains the name of the file to be sent. And then it uses
    exec() system calls to use "scp" to send the file.
    Note: this assumes that passwordless ssh has been set up between the client and server machines.
    */




    /* ITS IN THIS FUNCTION THAT I GET THE ERROR. I SPLIT THE PROCESS WITH FORK, RUN 
       EXECL() AND THEN WAIT() ON THE CHILD PROCESS */
    int Send(string fileName)
    {
      pid_t pid;
       // char * parmList[] = {"scp", fileName, destination, NULL};
      int    status;

      if ((pid = fork()) < 0) {     /* fork a child process           */
         printf("*** ERROR: forking child process failed\n");
         exit(1);
      }
      else if (pid == 0) {          /* for the child process:         */
         if (execl("scp", fileName.c_str(), computerName.c_str(), NULL) < 0) {     /* execute the command  */
            printf("*** ERROR: exec failed\n");
            exit(1);
         }
      }
      else {                                  /* for the parent:      */
         while (wait(&status) != pid)       /* wait for completion  */
            ;
      }
    }
};


int main()
{
    Connection *con = new Connection("server");
    /* I'm just doing this to see if this works to create the string "testgoingnow". Who knows. */
    //string string = "test".append("going").append("now\n");
   string string1 = "test";
   string at = "@";
   string string2 = "going";
   string new_string = string1 + at + string2;
   cout << new_string << "\n";

   Send("test.txt");

    //cout << string;

    return 0;
}

我得到這個編譯器錯誤:

connection.cpp: In member function ‘int Connection::Send(std::string)’:
connection.cpp:64: error: no matching function for call to ‘wait::wait(int*)’
/usr/include/bits/waitstatus.h:68: note: candidates are: wait::wait()
/usr/include/bits/waitstatus.h:68: note:                 wait::wait(const wait&)

也許您需要包含正確的標題,請嘗試

#include <sys/wait.h>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM