Untitled
unknown
plain_text
4 years ago
2.3 kB
38
Indexable
char* yytextstr = yytext;
char* yyTextSubstring = new char[strlen(yytext) - 1];
int index = 0;
for(int i = 2; i < strlen(yytext) - 1; i++){
yyTextSubstring[index++] = yytextstr[i];
}
yyTextSubstring[index++] = '\n';
yyTextSubstring[index++] = 'e';
yyTextSubstring[index++] = 'x';
yyTextSubstring[index++] = 'i';
yyTextSubstring[index++] = 't';
yyTextSubstring[index++] = '\n';
yyTextSubstring[index++] = '\0';
std::string command(yyTextSubstring);
printf("command is %s\n", command.data());
int parent[2];
int child[2];
if(pipe(parent)){
perror("parent error");
exit(1);
}
if(pipe(child)){
perror("child error");
exit(1);
}
int tempIn = dup(0);
int tempOut = dup(1);
int tempErr = dup(2);
dup2(parent[0], 0);
dup2(child[1], 1);
close(parent[0]);
close(child[1]);
write(parent[1], command.c_str(), command.size());
close(parent[1]);
int pid = fork();
if(pid < 0){
std::vector<char *> arguments;
arguments.emplace_back(const_cast<char *>(std::string("/proc/self/exe").c_str()));
arguments.emplace_back(nullptr);
execvp(arguments.at(0), arguments.data());
perror("execvp in subshell");
exit(1);
} else if(child < 0){
perror("forking subshell error");
exit(1);
} else {
waitpid(pid, NULL, 0);
dup2(tempIn, 0);
dup2(tempOut, 1);
close(tempIn);
close(tempOut);
char * buffer = new char[1024];
read(child[0], buffer, 1024);
close(child[0]);
for(int i = strlen(buffer); i >= 0; i--){
if(buffer[i] == '\n'){
myunputc(' ');
} else {
myunputc(buffer[i]);
}
}
delete buffer;
}Editor is loading...