
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);
}
No.3ベストアンサー
- 回答日時:
execlp() は成功すると戻ってきませんよ。
そもそも起動先の端末はこのプログラムとは別プロセスだし。人間が介在していいなら、起動した端末で tty コマンドをたたいて、表示された端末名に対して書き込めば良いのですが。
プログラムでやろうとすると、readdir(3)で "/dev/pty" を調べて、gnome-terminal 起動後にもう一度 readdir(3) して、増えた番号が開いた端末の端末名です。その "/dev/pty/3" 等に対してfopen(3)して書き込みを行ってください。
No.2
- 回答日時:
単に別のターミナルに文字列を出力するだけなら、下記のような簡単な方法でもできますよ。
これをsystemで実行すればいいでしょう。
添付画像参照。(fedora20beta GNOMEです)

No.1
- 回答日時:
>execlp("gnome-terminal","gnome-terminal",NULL);
>printf("Hello World!!\n");
起動したターミナルと起動させたプロセスでは関連がないでしょう。
起動したターミナルの子プロセス上で動作しているであろうシェルの標準出力先を取得して、そこに書き込む必要があると思われますが……。
# /dev/pts/~ のデバイスファイルでしょうかねぇ…。
# プロセスの親子関係を辿っていく必要があるでしょうね。たぶん。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linux デーモンのpsコマンドで...
-
Linuxのカーネルパニックについて
-
NTPサーバが死んでいるときのNT...
-
rsh コマンドでのパスワード入...
-
rcpができない
-
起動時のターミナルの状態を戻...
-
[トラブル]fsck後に、ファイル...
-
httpd(Apache)でhttpsのポート...
-
FTPでユーザ名の表示
-
apacheが起動しない
-
qmailが動かない。
-
sambaのnmbが起動できない
-
batファイルでのプログラム起動順
-
FMVマイページ、FMVサーチが勝...
-
pc初心者です。 UEFIでの設定で...
-
ヘルプとサポートが消えません
-
VirtualBoxでキー入力を受け付...
-
リモートデスクトップに接続で...
-
JEC CAMBAS CADiOS
-
最初から入力モードをローマ字(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DNSサーバーの構築「no servers...
-
Linuxサーバーは定期リブートを...
-
インデザイン(InDesing)の開き...
-
起動時のターミナルの状態を戻...
-
AIXルーティング情報について
-
MacOSのLaunchAgentsってなんで...
-
batファイルでのプログラム起動順
-
chkconfig がうまくいかない
-
WMIを有効にする方法が分かりま...
-
geditについて
-
Linux(redhat系)の実行ユーザ...
-
telnetd, sshdが動いているかど...
-
rsh コマンドでのパスワード入...
-
NTPサーバが死んでいるときのNT...
-
VNCクライアントから管理者権限...
-
wermgr.exeって何ですか?
-
FTPでユーザ名の表示
-
リモートのサーバでXwindowを起...
-
Linuxのカーネルパニックについて
-
特定コマンドを同時実行
おすすめ情報