dポイントプレゼントキャンペーン実施中!

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);
}

A 回答 (3件)

execlp() は成功すると戻ってきませんよ。

そもそも起動先の端末はこのプログラムとは別プロセスだし。

人間が介在していいなら、起動した端末で tty コマンドをたたいて、表示された端末名に対して書き込めば良いのですが。

プログラムでやろうとすると、readdir(3)で "/dev/pty" を調べて、gnome-terminal 起動後にもう一度 readdir(3) して、増えた番号が開いた端末の端末名です。その "/dev/pty/3" 等に対してfopen(3)して書き込みを行ってください。
    • good
    • 0

単に別のターミナルに文字列を出力するだけなら、下記のような簡単な方法でもできますよ。


これをsystemで実行すればいいでしょう。
添付画像参照。(fedora20beta GNOMEです)
「別ターミナルへのprintf出力」の回答画像2
    • good
    • 0

>execlp("gnome-terminal","gnome-terminal",NULL);


>printf("Hello World!!\n");

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!