I am having trouble with parsing chars into seperate tokens
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;
}
Solution
#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;
}


