程序控制題

2022-07-12 03:00:12 字數 2089 閱讀 2784

如題

解析:這道題的1,3問比較簡單,就不多做介紹,主要是第2問。拿到這道題後我立馬就想到了可以用程序間通訊解決,回憶了一下,感覺明明學過,但是不知從何下手,因此,第一版**用的時間差來控制程序的寫入。

**如下

#include#include#include#include#include#include#include#includeint get_second()

int init()

fclose(fd1);

fd1 = fopen("c.cfg", "w");

if(fd1 == null)

fputs("helloworld", fd1);

fclose(fd1);

fd2 = fopen("b.cfg", "w");

if(fd2 == null)

fputs("0123456789", fd2);

fclose(fd2);

}int fgets(const char *file, char *str)

fgets(str, 11, fd1);

fclose(fd1);

}int write(int i, char *p)

fputc(p[i], fd1);

fclose(fd1);

}int main()

; char *ar = ;

init();//ques1

pid1 = fork();

if(pid1 == 0)//ques2

sleep(1);

} exit(0);

} else

sleep(1);

}} else

}if(pid2 == 0)//ques3

exit(0);

}

3個程序啟動後,讓p2程序先睡眠一秒,以保證p1程序先寫入。p1程序僅在奇數秒寫入,p2程序僅在偶數秒寫入,兩個程序交替寫共至少需要20秒。(著實很蠢的辦法)

接著回去再看了看管道通訊的部分,考慮使用兩個無名管道進行相互通知自己已經寫到a檔案結束,這樣就不用休眠,大大降低程式的執行時間。

#include#include#include#include#include#include#include#includeint init()

fclose(fd1);

fd1 = fopen("c.cfg", "w");

if(fd1 == null)

fputs("helloworld", fd1);

fclose(fd1);

fd2 = fopen("b.cfg", "w");

if(fd2 == null)

fputs("0123456789", fd2);

fclose(fd2);

}int read_from_pipe(int fd)

; if(read(fd, message, 100) > 0)

else

return 0;

}int write_to_pipe(int fd)

return 1;

}int fgets(const char *file, char *str)

fgets(str, 11, fd1);

fclose(fd1);

}int write(int i, char *p)

fputc(p[i], fd1);

fclose(fd1);

}int main()

; char *ar = ;

init();

if(pipe(fd) || pipe(fd1))

pid1 = fork();

if(pid1 == 0)

while(i<10 && read_from_pipe(fd1[0]));

exit(0);

} else

}else

}if(pid2 == 0)

exit(0);

}

這版的時間不到1秒,效率增加接近2000%

程序及程序控制

學習程序之前,先了解一下程式 所謂程式就是指編譯好的二進位制檔案,在磁碟上,不占用系統資源 cpu 記憶體.而程序是與作業系統相關,是指在記憶體中執行起來的程式,占用一些系統資源,每當乙個程式執行,就相應產生乙個程序。程序的一些相關資訊被放在乙個叫程序控制塊的資料結構中,稱之為pcb。linux下的...

Unix 程序控制

一 程序 程序id為1是init程序,在自舉過程結束時由核心呼叫。程序id為2是頁精靈程序,此程序負責支援虛存系統的請頁操作。也是核心程序。二 fork 對於父程序已經終止的所有程序,它們的父程序都改變為init程序,我們稱這些程序由init程序領養。此保證了每個程序有乙個父程序。init被編寫成只...

程序控制塊

程序控制塊 pcb 的結構 程序控制塊 pcb process control block 存放程序的管理和控制資訊的資料結構稱為程序控制塊。它是程序管理和控制的最重要的資料結構,每乙個程序均有乙個pcb,在建立程序時,建立pcb,伴隨程序執行的全過程,直到程序撤消而撤消。在不同的作業系統中對程序的...