Forum I Roku Informatyki UW

03_pipe

Go down

03_pipe

Post by Gricha on Fri Oct 28, 2011 12:21 am

Czy komuś udało się zrobić 3 zadanie korzystając z printfa i scanfa? Ja zrobiłem na readach i writeach (pna standardowe wejście/wyjście używam read(0,...) (write(1, ...))) Fajnie, działa, ale chciałbym na standardowe wyjście pisać printfem, a ze standardowego wejścia czytać readem. Podmiana jednak nie działa zarówno w dziecku jak i w ojcu :O
avatar
Gricha

Liczba postów : 425
Join date : 2010-10-12
Age : 27
Skąd : Myszków

View user profile

Back to top Go down

Re: 03_pipe

Post by rathma on Mon Oct 31, 2011 9:41 pm

U mnie w dziecku działa na printach i scanfach

rathma

Liczba postów : 102
Join date : 2010-12-15

View user profile

Back to top Go down

Re: 03_pipe

Post by Gricha on Tue Nov 01, 2011 3:52 pm

:OOOO

Podzielisz się kodem? Smile Lub powiesz mi czemu to nie śmiga? Smile

ojciec:
Code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "err.h"

int main(int argc, char *argv[]){
   
   int ppc[2];
   int pcp[2];

   if (pipe(ppc) == -1) syserr("blad\n");
   if (pipe(pcp) == -1) syserr("blad\n");   

   switch(fork()){
      case -1:
         syserr("Blad\n");
      case 0:
         if (close(ppc[1]) == -1) syserr("close ppc1\n");
         if (close(pcp[0]) == -1) syserr("close pcp0\n");
         close(0);
         dup2(ppc[0], 0);
         close(1);
         dup2(pcp[1], 1);
         if (close(ppc[0]) == -1) syserr("close ppc0\n");
         if (close(pcp[1]) == -1) syserr("close pcp1\n");
         execvp("./child", argv + 1);
         break;

      default:
         
         if (close(ppc[0]) == -1) syserr("parent close ppc0\n");
         if (close(pcp[1]) == -1) syserr("parent close pcp1\n");
         while (1){
            char message[100];
            scanf("%s", message);
   //         if (sizeof(message) == 0) break;
            if (write(ppc[1],message,  100)==-1) syserr("write nie dziala\n");
            char answer[100];
            if (read(pcp[0], answer, 100)<=0) syserr("read nie dziala\n");
            printf("hikhihihieh\n");
            printf("%s", answer);
         }
      exit(0);

   }


}



Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


int main(){

   while(1){
      
      char message[1000]="";
      scanf("%100s", message);
      write(1, message, 100);

   }
   exit(0);
}
avatar
Gricha

Liczba postów : 425
Join date : 2010-10-12
Age : 27
Skąd : Myszków

View user profile

Back to top Go down

Re: 03_pipe

Post by rathma on Tue Nov 01, 2011 5:16 pm

Musisz uzyc fflush(f) po kazdym zapisie do pipe'a jezeli uzywasz funkcji ktore nie korzystaja bezposrednio z deskryptorow (fputs, fprintf, printf).

Moj kod: bit.ly roXYAl

rathma

Liczba postów : 102
Join date : 2010-12-15

View user profile

Back to top Go down

Re: 03_pipe

Post by Heniek on Sat Nov 19, 2011 5:25 pm

Mam pytanie czy: jak sprintf-em wrzucam liczbe do bufora, a potem wysyłam jego zawartosc writem to bufor jest czyszczony? Bo nie wiem czy jak potem cos do bufora wstawie, to tamte stare dane sa czy ich nie bedzie

Heniek

Liczba postów : 329
Join date : 2010-10-12

View user profile

Back to top Go down

Re: 03_pipe

Post by Sponsored content


Sponsored content


Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum