|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-11-01, 02:33 PM | #1 |
註冊會員
|
疑問 - 請問一題c的fork在unix上執行
請教一下,我們的os要寫一題程式,但我們不常在用c的行程,所以一頭務水,我們大致上是寫說,要由二個行程,一個會做生產者執行Producer而另一個行程執行Customer的函數,但是我執行不出來,函數那些都沒問題,就差在main裡的行程我不會叫,
總而言之就是有一個行程執行Producer() 另一個執行Customer.. 希望各位先進能幫我解決這一個問題 謝謝 #include<stdio.h> #include<sys/types.h> #include<unistd.h> int Queue[11]; int Counter; void Clear_Queue(){ int i; for( i = 0;i<11;i++){ Queue[i]=0; } } int random_at_range ( int lower, int upper) { return rand ( ) % (upper-lower+1) + lower; } void Producer(){ int i; Counter=random_at_range(1,10); Clear_Queue(); for(i=0;i<=Counter;i++){ Queue[i] = random_at_range(1,100); } } void Customer(){ int i; if(Counter==0){ printf("Queue is null\n"); return; } for(i=0;i<=Counter;i++){ printf("Queue[%d]=%d\n",i,Queue[i]); } } int main() { srand ( (unsigned) time ( NULL ) ); int pid; pid = fork(); if(pid == 0){ while(1){ Producer(); printf("excute Producer\n"); sleep(1); } exit(1); } else if(pid >0){ while(1){ Customer(); printf("excute customer\n"); sleep(1); } } } |
送花文章: 5,
|
2006-11-02, 03:17 AM | #2 (permalink) | |
註冊會員
|
這要在LINUX上執行喔...
引用:
|
|
送花文章: 23,
|
2006-11-03, 09:02 AM | #4 (permalink) | ||
註冊會員
|
你可以用它fork()之後的pid值來判斷
你要宣告一個pid_t結構的變數 接下來就可以使用pid的數值去判斷了 你原來是宣告int pid 因為pid是一個結構化的東西 所以沒辦法用int 去接 一定要使用它的結構形態才可以使用 引用:
可以使用switch來檢驗你有沒有fork()成功 引用:
|
||
送花文章: 23,
|