/* 2 Procese. Fiul ii trimite parintelui un nume de user ('forest'), iar * parintele ii raspunde fiului cu numarul de procese ale utilizatorului respectiv. */ #include #include #include #include main() { int p1[2], p2[2]; int n, i; char user[] = "forest"; char cmd[50], linie[10]; FILE *fd; pipe(p1); pipe(p2); if (fork()>0) { // suntem in parinte close(p1[1]); close(p2[0]); i = read(p1[0], user, sizeof(user)); if (i<0) perror("Parinte - err la read:"); n = -1; sprintf(cmd, "ps -U %s | wc -l", user); fd = popen(cmd, "r"); if (fd!=NULL) fgets(linie, 10, fd); n = atoi(linie); pclose(fd); i = write(p2[1], &n, sizeof(int)); if (i<0) perror("Parinte - err la write:"); close(p1[0]); close(p2[1]); } else { // suntem in fiu close(p1[0]); close(p2[1]); n = 10; i = write(p1[1], user, strlen(user)+1); if (i<0) perror("Fiu - err la write:"); i = read(p2[0], &n, sizeof(int)); if (i<0) perror("Fiu - err la write:"); printf("userul %s are %d procese.\n", user, n); close(p1[1]); close(p2[0]); exit(0); } }