如何在C ++中将所有输入(cin)记录到文件中

时间:2011-11-01 12:50:35

标签: c++ shell io

实际上,我正在做一个小型的工作。我的功能有效,但是当我想将整个cin内容(命令,参数,输出)记录到文件中时,文件中没有任何内容。我无处可寻找带有参数的完整输入和输出的东西。

我希望有人可以帮助我。

我的代码:

using namespace std;

 ofstream outputFile;

void read_command(char *com, char **par){

    fprintf(stdout, "$");
    cin >> com;
    outputFile.open("logging.txt");     // file opened but nothing APPEARS IN IT????

        if(strcmp(com,"date")== 0){             // DATE
          time_t rawtime;
          time ( &rawtime );
          printf ( "%s", ctime (&rawtime) );
         }


        else if(strcmp(com,"echo")== 0)         // ECHO
        {
            string echo_part;
            cin >> echo_part;
            cout << echo_part << endl;

       }

        else if(strcmp(com,"sleep")== 0){           // SLEEP
            int howlong = 0;
            cin >> howlong;
            cout << "seconds: " << howlong << "....zZZzzZzz" << endl;
            sleep(howlong);

        }

        else if(strcmp(com,"ps")== 0)           // PROCESS
        {
            execlp("/bin/ps","ps","-A",NULL);       // ps  - command

        }

}

void handler(int p) {  // CTR-C handler

    cout << endl;
    cout << "Bye !" << endl;
    outputFile.close();
    alarm(1); // 2 seconds alarm ends process with kill
}


int main(){

    int childPid;
    int status;
    char command[20];
    char *parameters[60];
    signal(SIGINT,&handler); // CTR-C exit disabled



    while (1) {

      read_command(command, parameters);

        if ((childPid = fork()) == -1) {
            fprintf(stderr,"can't fork\n");
            exit(1);
        }
        else if (childPid == 0) { //child
            execv(command, parameters);
            exit(0);
        }
        else { // parent process
            wait(&status);
        }
    }
}

4 个答案:

答案 0 :(得分:1)

您为每一行重新打开输出流outputFile,并使用每个新命令覆盖该文件。

编辑:正如其他海报所指出的那样,实际上并没有向outputFile写一些东西可能是第二个原因。

答案 1 :(得分:0)

你打开outputFile,但从不写任何东西。应该出现什么?

要输出文件内容,请尝试

outputFile << something

答案 2 :(得分:0)

没有

outputFile << ...;

所以你没有写到文件

答案 3 :(得分:0)

您的代码包含许多潜在的内存访问冲突。

有些库可以帮助您完成您的工作(读取和解释用户输入),例如GNU Readline library,它以C编码(但可以由C ++代码使用,就像所有C编写的库的情况)。 有一些不错的C ++包装器,例如SReadlineWrapper