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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インデザイン(InDesing)の開き...
-
telnetd, sshdが動いているかど...
-
起動時のエラーについて。
-
batファイルでのプログラム起動順
-
AIXルーティング情報について
-
telnetってどうやって起動させ...
-
DNSサーバーの構築「no servers...
-
Linux(redhat系)の実行ユーザ...
-
apache2.0.64に後からmod_sslを...
-
別ターミナルへのprintf出力
-
apacheが起動しない
-
VNCクライアントから管理者権限...
-
ユーザ権限でapacheの停止がで...
-
コマンドでプロセスの優先順位...
-
namedが起動しない
-
FReeBSD でセキュリティのため...
-
ftpサーバーの立て方
-
LinuxからWindowsサーバへのrsh
-
WMIを有効にする方法が分かりま...
-
MacOSのLaunchAgentsってなんで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DNSサーバーの構築「no servers...
-
Linuxサーバーは定期リブートを...
-
apacheが起動しない
-
WMIを有効にする方法が分かりま...
-
geditについて
-
MacOSのLaunchAgentsってなんで...
-
インデザイン(InDesing)の開き...
-
linuxからのメールが文字化けと...
-
telnetd, sshdが動いているかど...
-
VNCクライアントから管理者権限...
-
AIXルーティング情報について
-
batファイルでのプログラム起動順
-
sambaのnmbが起動できない
-
rsh コマンドでのパスワード入...
-
FTPでユーザ名の表示
-
Linux(redhat系)の実行ユーザ...
-
CentOS7が起動したときGNOME起...
-
wermgr.exeって何ですか?
-
テキストログインでstartxをし...
-
Linuxで起動時に実行させるには?
おすすめ情報