实际上,我正在做一个小型的工作。我的功能有效,但是当我想将整个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);
}
}
}
答案 0 :(得分:1)
您为每一行重新打开输出流outputFile,并使用每个新命令覆盖该文件。
编辑:正如其他海报所指出的那样,实际上并没有向outputFile写一些东西可能是第二个原因。
答案 1 :(得分:0)
你打开outputFile
,但从不写任何东西。应该出现什么?
要输出文件内容,请尝试
outputFile << something
答案 2 :(得分:0)
没有
outputFile << ...;
所以你没有写到文件
答案 3 :(得分:0)
您的代码包含许多潜在的内存访问冲突。
有些库可以帮助您完成您的工作(读取和解释用户输入),例如GNU Readline library,它以C编码(但可以由C ++代码使用,就像所有C编写的库的情况)。 有一些不错的C ++包装器,例如SReadlineWrapper。