Ⅰ c語言多進程編程
多進程這個詞用得比較少,聽過來有點不熟悉。你這個程序在linux下應該很容易實行,就是個進程間通信的問題,管道、消息隊列、共享內存都可以,可以找找相關資料。昨天失言不好意思。
三個源文件分別為1.c、2.c、3.c一個頭文件share.h。
share.h:
//共享的內存,兩個數組
typedef struct{
int a[2];
int b[2];
int id;
}share_use;
1.c:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include"share.h"
int main(){
void *shared_memory = (void *)0;
share_use *share_stuff;
int shmid;
shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//創建共享內存
if(shmid==-1){
fprintf(stderr,"共享內存創建失敗!\n");
exit(1);
}
shared_memory = shmat(shmid, (void *)0,0);//讓進程可以訪問共享內存
if(shared_memory == (void *)-1){
fprintf(stderr,"啟用共享內存失敗!\n)";
exit(1);
}
printf("Memory attached at %X\n",(int)shared_memory);
share_stuff = (share_use *)shared_memory;
share_stuff->id=0;
share_stuff->a[0]=1;
share_stuff->a[1]=2;
while(1){
if(share_stuff->id)
exit(0);
sleep(10);
}
}
2.c:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include"share.h"
int main(){
void *shared_memory = (void *)0;
share_use *share_stuff;
int shmid;
shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//創建共享內存
if(shmid==-1){
fprintf(stderr,"共享內存創建失敗!\n");
exit(1);
}
shared_memory = shmat(shmid, (void *)0,0);//讓進程可以訪問共享內存
if(shared_memory == (void *)-1){
fprintf(stderr,"啟用共享內存失敗!\n");
exit(1);
}
printf("Memory attached at %X\n",(int)shared_memory);
share_stuff = (share_use *)shared_memory;
share_stuff->b[0]=share_stuff->a[0]*100;
share_stuff->b[1]=share_stuff->a[1]*100;
while(1)
{
if(share_stuff->id)
exit(0);
sleep(10);
}
}
3.c:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include"share.h"
int main(){
void *shared_memory = (void *)0;
share_use *share_stuff;
int shmid;
shmid=shmget((key_t)1234,sizeof(share_use),0666|IPC_CREAT);//創建共享內存
if(shmid==-1){
fprintf(stderr,"共享內存創建失敗!\n");
exit(1);
}
shared_memory = shmat(shmid, (void *)0,0);//讓進程可以訪問共享內存
if(shared_memory == (void *)-1){
fprintf(stderr,"啟用共享內存失敗!\n");
exit(1);
}
printf("Memory attached at %X\n",(int)shared_memory);
share_stuff = (share_use *)shared_memory;
printf("共享內存中有元素:%d , %d",share_stuff->b[0],share_stuff->b[1]);
share_stuff->id=1;
return 0;
}
linux或unix環境下編譯
Ⅱ 使用C語言編程實現:父進程創建二個子進程,三個進程各自列印出其進程
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int i=2;
int pid=0;
printf("father id=%ld ",getpid());
while(i-->0){
pid = fork();
if(pid==0){
printf("son id=%ld ",getpid());
return 0;
}
}
return 0;
}
Ⅲ C語言怎麼實現多任務的
跟語言無關,多任務是跟操作系統相關的。
Ⅳ C語言編程多分支
你的題目中大眾應該是起步價7元,而不是起步價7元/公里,尼桑也應該是起步價8元,而不是8元/公里
按照題目要求編寫的C語言程序如下
#include<stdio.h>
#include<string.h>
intmain()
{
chars[10];
intkm;
floatfee;
printf("請輸入乘車的車型及行車公里數 ");
scanf("%s%d",s,&km);
if(strcmp(s,"大眾")==0){
if(km<=3){
fee=7;
}else{
fee=7+(km-3)*2.1;
}
printf("應付車資%f",fee);
}elseif(strcmp(s,"尼桑")==0){
if(km<=3){
fee=8;
}else{
fee=8+(km-3)*2.4;
}
printf("應付車資%f",fee);
}elseif(strcmp(s,"本田")==0){
if(km<=3){
fee=9;
}else{
fee=9+(km-3)*2.7;
}
printf("應付車資%f",fee);
}else{
printf("輸入車型不正確!");
}
return0;
}
Ⅳ C語言程序編程
inti,j,m=0;
for(i=300;m%2==0;i--)
{
m=0;
for(j=1;j<=i;j++)
if(i%j==0)m++;
}
returni+1;
運行驗證:
Ⅵ [高分,急]C語言,如何實現多線程,有具體方案,請提供!
你這個問題可是超過200分的啊,
這個往大了說是一個比較復雜的設計方案。
實際上C語言是沒有多線程的概念的,但是我們可以通過Task來實現多任務。
簡單的說,可以採取以下方案:
定義一個主Task,將其置為常駐Task,用以進行Task調度和Task的啟動/終了和交互的管理。
定義一個Task優先順序列表,用優先順序來作為Task調度和管理的基礎。
定義一個共享域,和相應的事件分發/廣播/傳遞的管理機制,由主Task來實現各Task間的事件傳遞。
定義3個List,實現Active,Ready,Dead的Task的管理和調度。
定義各普通Task,包含Task基本信息:Task的棧指針,Task情報,Task存儲空間大小,Task的優先順序,Task的事件列表(定義可以接收/發送的事件,以及可以排隊的事件的個數),以及如果需要的話可以定義Task的從屬(父子)關系。
另外還有幾個注意點:
1. 通過C的臨界域(critical section)結合PV操作來實現某些Task的原子性處理要求。
2. 通過Signal來實現中斷和再開
3. 如果需要處理中斷和再開的話,一定要注意現場保護
4. 同優先順序的Task可以通過時間片輪循的方式進行多任務實現
暫時就想到這么多,有不明白的通過消息進一步交流吧:)
Ⅶ 怎樣用c語言實現多任務同時運行,急.......
用個API函數。
包函頭文件 window.h
CreateThread(NULL,0,FunPro,NULL,0,NULL);
你再寫個線程函數 FunPro
int WINAPI FunPro()
{
return 0;
}
大概是這樣,我也沒寫過,你自己再去網路下。