0

次のようなプログラムを作成する必要があります。

  • 番号を尋ねる
  • 子プロセスを作成する(vforkを使用)
  • 平方根を計算する(子プロセスで)
  • 親プロセスからの平方根を表示する

これが私のコードです

#include <stdio.h>
#include <sys/types.h>
#include <math.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    double n=0;
    printf("Number: "); //ask number
    scanf("%d", &n);

    pid_t pid = vfork(); //create child process

    if (pid==0)//if child process
    {
        printf("Child process started\n");
        n = sqrt(n);//calculate square root
    }
    else//parent process
    {
        printf("Returnning to parent process\n");
    printf("Square Root: %d",n);
    }       

    return 0;
}

しかし、私のコードは機能しません、誰かが私を助けることができますか?

4

3 に答える 3

2

なぜあなたはそれがうまくいくと期待しますか?それ以外のことを行うと、明示exec_exitvfork未定義の動作になります。見る:

vfork()システムコール

そして、の恐怖についてのいくつかのさらなる議論vfork

http://ewontfix.com/7/

http://www.openwall.com/lists/musl/2012/12/31/16

興味深い場合は、プログラムで発生する可能性のある問題のリストを次に示します(UBの兆候)。

  • printf子供の中では、親のstdio状態をひどく破壊する可能性があります。
  • nレジスターに永続的に保存される可能性があります。その場合、親が子によって行われた変更を確認する方法はありません。
  • コンパイラはnelseブランチで初期化されていないことを確認できるため、それを読み取るためのコードを生成する必要はありません(このブランチは、値が不確定なオブジェクトにアクセスすることにより、無条件にUBを呼び出します)。
于 2013-03-25T03:23:39.123 に答える
0

子の平方根を計算していますが、親でそれを印刷しようとしています。親は平方根が何であるかを知りません。親に平方根を出力させたい場合は、その値を子から親プロセスに何らかの方法で伝達する必要があります。子プロセスで平方根を出力することになっている可能性が高いようです。

于 2013-03-25T03:38:45.947 に答える
0
   int main(int argc, char **argv) {    int  n=0;


    pid_t pid = vfork(); //create child process

    if (pid==0)//if child process
    {
        printf("Child process started\n");
       scanf("%d",&n);

        n = sqrt(n);//calculate square root

       _exit(23);
    }
    else//parent process
    {
     printf("Returnning to parent process\n");
    printf("Square Root: %ld",n);
    }

    return 0; }
于 2014-02-03T13:44:52.050 に答える