Здравствуйте. Пытаюсь разобраться, как можно использовать xterm для своих нужд, нужен вывод текста в консольв X-ах. Набросал простенький пример.
using namespace std;
int clone_xterm(void* pPtr)
{
cout << "create xterm process..." << endl;
int l_fID = open("/tmp/xterm_file", O_CREAT | O_RDONLY | O_NONBLOCK, S_IREAD| S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH);
cout << "open file /tmp/xterm_file with ID = " << l_fID << endl;
stringstream l_ss;
l_ss << "-Sxt/" << l_fID;
if (execlp("xterm", "xterm", l_ss.str().c_str(), NULL) == -1)
{
cout << "create xterm proces filed :(" << endl;
}
else
cout << "xterm created :)" << endl;
close(l_fID);
return 0;
}
int main()
{
void *l_pstack = malloc(1048576);
char *l_p = (char*)l_pstack + 1048575;
char *l_pStr = (char*)"test\n\r";
int l_fID = open("/tmp/xterm_file", O_CREAT | O_WRONLY | O_NONBLOCK | O_TRUNC, S_IREAD| S_IWRITE | S_IRGRP | S_IWGRP | S_IROTH);
pid_t l_pXterm = (pid_t)clone(&clone_xterm, (void*)l_p, 0, NULL);
int i = 0;
while (i < 10)
{
sleep(1);
cout << "i = " << i << endl;
write(l_fID, (void*)l_pStr, strlen(l_pStr));
i++;
}
kill(l_pXterm, SIGQUIT);
close(l_fID);
remove("/tmp/xterm_file");
free(l_pstack);
return 0;
}
Все работает, но проблема в том, что пока открыто второе окно xterm (созданное через execlp() и в котором отражаются выводимые строки) загрузка процессора составляет 100%. Как только комментирую ключ запуска -Sccn нагрузка на процессор обычная. Как этого можно избежать, или, что я делаю не правильно?
ASP14 (FC9) + GCC4.3.2 + xterm (241)
Заранее благодарю за ответы.
P.S. на стиль кода прошу не смотреть ибо пример «написан на коленке», что бы понять «как оно работает».