У меня есть программа, и в ней 2 разных способа вызова дочернего процесса. Хотелось бы связать с тем уже уже имееться.
Вариант 1:
| Код | FILE * m_pipe = popen(getenv("SCRIPT_FILENAME"), "r"); int m_size = 80; char buf[m_size + 1]; while (fgets(buf, m_size, m_pipe) != NULL) { (void)printf("%s", buf); } pclose(m_pipe);
|
Вариант 2:
| Код | int pipedes[2]; pid_t pid; pipe(pipedes); pid = fork(); if (pid > 0) { close(pipedes[1]); char buffer[1024 + 1];
FILE * stream = fdopen(pipedes[0], "r"); while (fgets(buffer, 1024, stream) > 0) { (void )printf("%s", buffer); } fclose(stream);
close(pipedes[0]); } else { close(pipedes[0]); dup2(pipedes[1], STDOUT_FILENO); char *my_argv[] = {getenv("SCRIPT_FILENAME"), NULL}; execve(getenv("SCRIPT_FILENAME"), my_argv, environ); close(pipedes[1]); return 0; }
|
Также имеется: STDIN (типа FILE *) - текущий входной поток, и его нужно передать в дочерний процесс. Можна както связать с уже имеющимся кодом ? Тоесть передать STDIN в дочерний процесс. |