Jak spawnować terminal podczas wykonywania skompilowanego programu w C?

2

Nadpisałem program do tworzenia zrzutów ekranu gnome, aby dostosować go do moich potrzeb, aby uzyskać zrzut ekranu z dodatkowego wyjściowego karty graficznej domowej roboty, a teraz po naciśnięciu przycisku PrintScreen wykonuje go (w razie potrzeby). Jednak w programie jest kilka instrukcji „printf” (napisanych w C), które chciałbym widzieć jako dane wyjściowe. Czy jest na to jakiś sposób? Być może przez odrodzenie terminala podczas wykonywania programu?

Uruchamianie: Red Hat Enterprise Linux Client wersja 5.8 (Tikanga)

użytkownik1028435
źródło
Możesz spróbować użyć skryptu, aby przesłać dane wyjściowe do okna standardowego.
Przełom
Czy mógłbyś opracować? Przykład może?
user1028435
Seth Noble opublikował świetną odpowiedź opisującą to szczegółowo.
Przełom
Myślę, że byłem zdezorientowany, ponieważ kiedy próbuję tego, o czym wspomniał, tworzy plik „1” i plik dziennika. Dodałem otwieranie dziennika w gedit jako drugie polecenie skryptu po jego zakończeniu, ale nie wiedziałem, czy istnieje sposób na okno terminala zamiast pliku.
user1028435
co się stanie, gdy potokujesz wyjście echo? (tj. bieg myprscr | echo)
Przełom

Odpowiedzi:

2

Najprostszym sposobem na przechwycenie danych wyjściowych byłoby zawinięcie polecenia PrintScreen w powłoce i przekierowanie danych wyjściowych do pliku. Na przykład, jeśli twój program ma nazwę myprscr, skryptem powłoki może być:

#!/bin/sh
myprscr 2>1 1>>/tmp/myprscr.log

Następnie przycisk PrintScreen powinien uruchomić skrypt powłoki zamiast polecenia. Prawdopodobnie będziesz chciał użyć pełnej ścieżki do myprscr.

Seth Noble
źródło
Tak, myślę, że to będzie zwycięska odpowiedź. I pomyśleć, że przeszedł przez cały ten trud podejmowania niewielki postęp ASCII bar łzawią .
użytkownik1028435
Tylko FYI głosowałbym, ale nie mam wystarczającej ilości karmy.
user1028435
Próbujesz tego teraz, ale dane wyjściowe nie są wyświetlane, dopóki myprscr nie zostanie całkowicie zakończone ... w każdym razie, aby to zrobić w czasie rzeczywistym?
user1028435
Możesz otworzyć inny terminal i zrobićtail -f /tmp/myprscr.log
Seth Noble