• ベストアンサー

別ターミナルへのprintf出力

LinuxでC言語プログラムから新しいターミナルを開き、そこにprintfで文字を出力したいのですがどうやったら良いのでしょうか?下記プログラムを作ってみましたが、新しいターミナルが開くだけで文字が出力されません #include <pthread.h> #include <stdio.h> #include <unistd.h> #include <signal.h> void* thread(void* arg) {  int pid=0;  pid = fork();  if(pid==0)  {    execlp("gnome-terminal","gnome-terminal",NULL);     printf("Hello World!!\n");  } } int main() {   pthread_t th;  void* result;   pthread_create(&th, NULL,thread, NULL);  pthread_join( th,&result); }

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

execlp() は成功すると戻ってきませんよ。そもそも起動先の端末はこのプログラムとは別プロセスだし。 人間が介在していいなら、起動した端末で tty コマンドをたたいて、表示された端末名に対して書き込めば良いのですが。 プログラムでやろうとすると、readdir(3)で "/dev/pty" を調べて、gnome-terminal 起動後にもう一度 readdir(3) して、増えた番号が開いた端末の端末名です。その "/dev/pty/3" 等に対してfopen(3)して書き込みを行ってください。

その他の回答 (2)

  • kteds
  • ベストアンサー率42% (1882/4440)
回答No.2

単に別のターミナルに文字列を出力するだけなら、下記のような簡単な方法でもできますよ。 これをsystemで実行すればいいでしょう。 添付画像参照。(fedora20beta GNOMEです)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>execlp("gnome-terminal","gnome-terminal",NULL); >printf("Hello World!!\n"); 起動したターミナルと起動させたプロセスでは関連がないでしょう。 起動したターミナルの子プロセス上で動作しているであろうシェルの標準出力先を取得して、そこに書き込む必要があると思われますが……。 # /dev/pts/~ のデバイスファイルでしょうかねぇ…。 # プロセスの親子関係を辿っていく必要があるでしょうね。たぶん。

関連するQ&A