
プログラミングの問題教えてください
子プロセスはsleep時間をカウントし、シグナルSIGTSTP受信後、親プロセスにsleep時間をパイプラインで通知し親プロセスは、 sleep時間をプリントして終了せよ
上のプログラムが親で、下が子です。子のプログラムに付け足すだけでいいです。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <time.h>
int main() {
char read_fd[3],write_fd[3];
int fd[2],st;
time_t result;
if (pipe(fd)<0) {
perror("pipe");
exit(EXIT_FAILURE);
}
snprintf(read_fd,sizeof(read_fd),"%d",fd[0]);
snprintf(write_fd,sizeof(write_fd),"%d",fd[1]);
if (fork()==0) {
if (execl("hw6-c","hw6-c",read_fd,write_fd,NULL)<0) {
exit(EXIT_FAILURE);
}
} else {
signal(SIGTSTP,SIG_IGN); // 親は Ctrl-Zを無視
}
wait(&st);
read(fd[0],&result,sizeof(result));
printf("elapsed time = %ld\n",result);
close(fd[0]);
close(fd[1]);
return EXIT_SUCCESS;
}
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
time_t start;
int read_fd,write_fd;
int main(int argc,char *argv[]) {
void stop();
read_fd=atoi(argv[1]);
write_fd=atoi(argv[2]);
signal(SIGTSTP,stop);
time(&start);
while (1) {
sleep(1);
printf(":");
fflush(stdout);
}
}
void stop() {
time_t end;
この部分を考えて下さい
Ctrl-Z後に子が行うことを書く
1)終了時刻(end)を測定
2)end-startをパイプバッファに書く
close(read_fd);
close(write_fd);
exit(EXIT_SUCCESS);
}

No.1ベストアンサー
- 回答日時:
以下の部分を追加してください。
----------------------
time_t result;
time(&end);
result = end - start;
write(write_fd,&result,sizeof(result));
-----------------------
以下実行結果
::::::^Zelapsed time = 6
CentOS release 6.3
gcc version 4.4.6
で動作確認しました。
不明点は、補足にて質問してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
途中からMFCを使用したい
-
Haru PDF Library
-
VC++で文字列から任意の文字を...
-
2重の(?)の#include
-
C++で2次元配列charをループしたい
-
#defineの使い方について
-
listをvectorにコピーするときに
-
CSting を TCHAR [] に変換した...
-
CStringとString
-
c++ ファイルからの複素数の読...
-
#include "fstream.h"
-
コーディング
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
#if 1 #elseの意味について
-
複数桁10進数の*桁目だけを抽出...
-
有効数字について 以前質問をし...
-
#define _CRT_SECURE_NO_WARNIN...
-
構造体の要素すべてに対する四...
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VxWorks 6.4ソケット接続につい...
-
gccでコンパイル時のエラー
-
iostream インクルード時に発生...
-
#include "fstream.h"
-
【C++】ヘッダ内でstringを格納...
-
#defineの使い方について
-
構文エラーが出ているのですが...
-
C言語のポインターで詰まっている
-
std::map の const 修飾について
-
C++での <iostream.h>と<iostre...
-
enumの値から定義名を文字列化...
-
MingwでC++のソースがコンパイ...
-
違い
-
VC++で
-
C++で日本語の処理がしたいです
-
継承されたABのクラスのポイン...
-
C++でShowCursorを使いたい。
おすすめ情報
tera term pro のemacsで実行してみたんですが
::::::::::::::::::::::::::がずっと続くだけでした
gcc ~.c -o ~と実行したんですが
ctrl-Zを押しても
::::::::^Z
となります