そのため、OSクラスのコードに取り組んでおり、プロジェクトでは、コマンドラインでファイルごとに新しい子プロセスを作成し、子から親に情報をパイプする必要があります。Unixのwcユーティリティを再作成することになっています(この部分はすでに処理しました)。
私がこれまでに試したことは次のとおりです。
for(i=0; i<argcount; i++){
int pid;
pid = fork();
if(pid == 0){
/* Child Process */
/* Close read pipes */
close(l_pipe[0]);
close(w_pipe[0]);
close(c_pipe[0]);
wc(lflag, wflag, cflag, filenames[i]);
} else {
/* Parent Process for piping */
/* Close write pipes */
close(l_pipe[1]);
close(w_pipe[1]);
close(c_pipe[1]);
/* Read from pipes */
read(l_pipe[0], &buffer, sizeof(count_t));
lines+=buffer;
read(w_pipe[0], &buffer, sizeof(count_t));
words+=buffer;
read(c_pipe[0], &buffer, sizeof(count_t));
bytes+=buffer;
}
}
ただし、これにより、子の数と同じ数の親が作成されます。これは明らかに間違っています。どこでフォークすべきか正確にはわかりません。私が持っている)、S(子の書込みなど何度でも)、子と親のプロセス間のパイプラインを使用するように、と私は親が(読むために必要があると確信しています。
あなたが提供できる提案をありがとう。
Greg Hewgillが彼の回答で提起した問題に加えて、私は次の問題を観察します。
count_t buffer;
—それは変数宣言を示すのに役立ちます。char buffer[sizeof(count_t)]
代わりに何らかの問題がある場合は、大小を問わず、あらゆる種類の問題があります。wc
関数がパイプを使用できるように、パイプはグローバル変数に含まれている必要があります。これは世界の終わりではありませんが、グローバル変数を避ける方が良い場合がよくあります。これは二次的な問題です。最初に修正する必要のある他のより大きな問題があります。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加