Facebook
From Soiled Water Vole, 1 Year ago, written in C.
Embed
Download Paste or View Raw
Hits: 69
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <wiringPi.h>
  4. #include <unistd.h>
  5. #include <sys/utsname.h>
  6. #include <signal.h>
  7. #include <sys/wait.h>
  8. #include <sys/types.h>
  9.  
  10.  
  11.  
  12. void blink1(int *arr, int i);
  13. void blink2 (int *arr, int i);
  14. pid_t k1, k2;
  15.  
  16. int main(){
  17.  
  18.     int i=0;
  19.     wiringPiSetup();
  20.     int status[3]={0,2,3};
  21.  
  22.     for (int m=0; m<3;m++){
  23.         pinMode(status[m], OUTPUT);
  24.     }
  25.     if(fork() ==0){
  26.         if (fork() == 0){
  27.             k2 = getpid();
  28.             printf("Kind 2: %d\n", getpid());
  29.             blink2(status, i);
  30.         } else {
  31.             k1 = getpid();
  32.             printf("Kind 1: %d\n", getpid());
  33.             blink1(status, i);
  34.         }
  35.     }else{
  36.         printf("Eltern: %d\n", getpid());
  37.  
  38.  
  39.         for (int j = 0; j<3;j++){
  40.             sleep(4);
  41.             system("ps -o pid,ppid,state,time,command");
  42.         }
  43.         wait(&k1);
  44.         kill(k2, SIGKILL);
  45.  
  46.         for (int m=0;m<3;m++){
  47.             pinMode(status[m], 0);
  48.         }
  49.     }
  50.  
  51.     return 0;
  52. }
  53.  
  54.  
  55. void blink1(int *arr,int i){
  56.     for(int m = 0; m<5;m++) {
  57.         digitalWrite(arr[i%3],1);
  58.         sleep(1);
  59.         digitalWrite(arr[i%3],0);
  60.         sleep(1);
  61.     }
  62.  
  63.     exit(0);
  64. }
  65.  
  66. void blink2(int *arr,int i){
  67.  
  68.     while(1){
  69.         digitalWrite(arr[i%3],1);
  70.         sleep(1);
  71.         digitalWrite(arr[i%3],0);
  72.         sleep(1);
  73.         i++;
  74.     }
  75. }