I am having trouble with parsing chars into seperate tokens. My code can only ex
ID: 3923200 • Letter: I
Question
I am having trouble with parsing chars into seperate tokens. My code can only execute some commands which doesn't have space. For example, ps, ls, or date can be executed. However, it cannot execute ps -ael. Because there is a space in between. Here is my code,
#include <iostream>
#include <string>
#include<sstream>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<sys/types.h>
#define MAX_LINE 80
using namespace std;
int main()
{
int should_run = 1;
string s,s1,a;
string arg[10];
char *arr[10];
while (should_run)
{
cout<< ("ubos>") ;
cin>> s1;
{
istringstream f(s1);
while (getline(f,s, ' '))
for(int i=0; i<10; i++)
{
arg[i] = s;
arr[i] = (char*)arg[i].c_str(); //converting string to char
arr[1] = NULL;
}
pid_t pid =fork();
int i;
if(pid<0)
{
cout<<"fork"<<endl;
}
else if (pid == 0 )
{
cout<<"child: " << pid << endl;
for(int i=0; i<10; i++)
{
execvp(arr[i],arr);
}
}
else if(pid > 0 )
{
wait(NULL);
cout<<"parent " << pid<<endl;
}
}
}
return 0;
}
Explanation / Answer
#include <iostream>
#include <string>
#include<sstream>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<sys/types.h>
#define MAX_LINE 80
using namespace std;
int main()
{
int should_run = 1;
string s,s1,a;
string arg[10];
char *arr[10];
while (should_run)
{
cout<< ("ubos>") ;
cin>> s1;
{
istringstream f(s1);
while (getline(f,s, ' '))
for(int i=0; i<10; i++)
{
arg[i] = s;
arr[i] = (char*)arg[i].c_str(); //converting string to char
arr[1] = NULL;
}
pid_t pid =fork();
int i;
if(pid<0)
{
cout<<"fork"<<endl;
}
else if (pid == 0 )
{
cout<<"child: " << pid << endl;
for(int i=0; i<10; i++)
{
execvp(arr[i],arr);
}
}
else if(pid > 0 )
{
wait(NULL);
cout<<"parent " << pid<<endl;
}
}
}
return 0;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.