Her şeyden önce rand() işleviyle ilgili birçok soru olduğunu biliyorum, ancak bunun farklı olduğunu düşünüyorum.C, rand işlevi sleep() işleviyle düzgün çalışmıyor
Aslında, sleep() işleviyle birleştirmediğimde rand() işlevi her zaman düzgün çalışır. Denedim. Fakat rand() işlevini, bu "uyku (rand()% 5)" gibi uyku() ile birleştirdiğimde, beklediğim gibi bazen tüm çocuk süreçleri için ürün rastgele bir süre, ancak bazen ilk 4-5 çocuk için iyi çalışır, bundan sonra kalan tüm çocuk süreçleri için 0 ürün. Yani diğer çocuk süreçleri uyumuyor. Ve bazen her çocuk süreçleri için 0 ürün.
BTW, Ubuntu 64bit kodluyorum.
Kodum hakkında: Ebeveyn işleminden 8 çocuğu işemek ve pid numaralarını tek tek basmak istiyorum. Ama bir çocuk oluşturduktan sonra uyku fonksiyonunu kullanmalıyım. Uyku zamanı rastgele olmalıdır. Bir tohum olarak time() işlevini kullandım ve rand işlevini kullanmaya çalıştım ancak uyku işleviyle düzgün çalışmıyor.
İşte benim kodudur:
#include <stdio.h>
#include <sys/sem.h>
#include <unistd.h>
#include <wait.h>
#include <stdlib.h>
#include <time.h>
void childs();
void parent();
int id;
int i;
int pidID[9];
int fd[2];
char buff[100];
int main(int argc, char *argv[]){
pid_t child;
for(i = 0; i < 8; i++){
pipe(fd);
child = fork();
wait(NULL);
if(child){
parent();
continue;
}else if(child == 0){
childs();
break;
}else{
perror("State\n");
exit(1);
}
}
if(child ==0){
printf("I am a child pid: %d, ppid: %d pidno: %d\n", getpid(), getppid(),pidID[i+1]);
}else{
printf("I am a parent pid: %d, ppid: %d pidno: %d\n", getpid(), getppid(),pidID[0]);
}
}
void childs(){
id = getpid();
pidID[i + 1] = id;
char swap[50];
sprintf(swap, "%d" ,id);
write(fd[1], swap, 10);
srand(time(NULL));
int randomTime = rand() %5;
printf("Random time: %d\n",randomTime);
sleep(randomTime);
}
void parent(){
pidID[0] = getpid();
read(fd[0], buff , 10);
printf("Buff: %s\n", buff);
}
"İyi çalışıyor" ile ne demek istediğinizi ve "0" olur ... ile ne demek istediğinizi tanımlayın. – Olaf
Bazen beklediğim gibi rand() ürünleri rastgele sayılar demek istiyorum. Ama bazen sadece 0 ürün. Şimdi soruyu düzenleyeceğim. – Ayse
Kodunuzu biçimlendirin ve doğru şekilde girin. Ve prototip olmayan fonksiyon belirleyicileri standart tarafından onaylanmamıştır. Onları kullanma. – Olaf