The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 10.6 Перенос приложений на uClinux

Распечатка 10.6 Перенос приложений на uClinux

Предыдущая  Содержание  Следующая V*D*V

Распечатка 10.6

 

/* Пример программы для обычного Linux */

 

/* fork.c */

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <sys/types.h>

 

int main(int argc, char *argv[])

{

  pid_t pid;

  /*

   * Если fork возвращает -1, это означает, что вызов fork

   * закончился неудачей при создании дочернего процесса.

   * В родительский процесс возвращается pid дочернего процесса.

   * В дочернем процессе возвращается 0.

   */

  if ((pid = fork()) < 0) {

    printf("Fork() failed\n");

    exit(1);

  }else if (pid != 0) {

    /* Код родителя */

    printf(“Parent exiting.\n”);

    exit(0);

  }

  /* Код потомка */

  printf(“Starting child...\n”);

  while (1) {

    sleep(2);

    printf("...Child running\n");

  }

}

 

/* Показанное выше приложение может быть перенесено на uClinux */

 

/* vfork.c */

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <sys/types.h>

 

int main(int argc, char *argv[])

{

  pid_t pid;

  int c_argc = 0;

  char *c_argv[3];

  char child=0;

 

  /* Определяя потомка, мы используем системный аргумент argv[1]=child */

  if (argc > 2 && !strcmp(argv[1],”child”)) child=1;

 

  /* используем vfork(), возвращаемые значения аналогичны fork() */

  if (!child) {

    if ((pid = vfork()) < 0) {

      printf("vfork() failed\n");

      exit(1);

    } else if (pid != 0) {

      /* Код родителя */

      printf(“Parent exiting.\n”);

      exit(0);

    }

 

    /*

     * Здесь вызывается exec потомка. Для идентификации потомка

     * мы передаём специальный аргумент

     */

    c_argv[c_argc++] = argv[0];

    c_argv[c_argc++] = "child";

    c_argv[c_argc++] = NULL;

    execv(c_argv[0], c_argv);

 

    /* Заметим, что если всё успешно, execv никогда не вернётся */

    printf(“execv() failed\n”);

    exit(1);

 

  }else { // Код потомка

    printf(“Starting child...\n”);

    while (1) {

      sleep(2);

      printf("...Child running\n");

    }

  }

}

 

Предыдущая  Содержание  Следующая