c语言进程间通信(c语言将一个程序的运行结果作为另一个程序的输入值怎么弄)
本文目录
- c语言将一个程序的运行结果作为另一个程序的输入值怎么弄
- 利用C语言写一个程序实现两个进程间进行管道通信
- 用C语言实现进程的同步与互斥实验
- C语言怎么在第一个程序中得到第一个程序中的插入的另一个程序的值
- linux c语言进程间通信疑问,上述程序只是想父进程创建一个消息队列,发给子进程消息,但是为什么没有成功
c语言将一个程序的运行结果作为另一个程序的输入值怎么弄
按你的意思,两个程序是分别运行的,这属于进程间通信,可以用管道(Windows和类Unix系统都有管道的概念)。或者,如果两个程序都是你写的,你可以把一部分功能封装成链接库的形式,使用静态链接库静态编译到另一个程序里,或是用动态链接库在运行时加载相应功能。还有个更简单的办法,是把输出重定向到文件,使用文件中转。
利用C语言写一个程序实现两个进程间进行管道通信
#include 《stdio.h》#include 《stdlib.h》#include 《errno.h》#include 《string.h》#define N 10#define MAX 100int child_read_pipe(int fd){ char buf; int n = 0;while(1) { n = read(fd,buf,sizeof(buf)); buf = ’\0’;printf("Read %d bytes : %s.\n",n,buf);if(strncmp(buf,"quit",4) == 0) break; }return 0;}int father_write_pipe(int fd){ char buf = {0};while(1) { printf("》"); fgets(buf,sizeof(buf),stdin); buf = ’\0’; write(fd,buf,strlen(buf)); usleep(500); if(strncmp(buf,"quit",4) == 0) break; }return 0;}int main(){ int pid; int fd;if(pipe(fd) 《 0) { perror("Fail to pipe"); exit(EXIT_FAILURE); }if((pid = fork()) 《 0) { perror("Fail to fork"); exit(EXIT_FAILURE);}else if(pid == 0){close(fd); child_read_pipe(fd);}else{close(fd); father_write_pipe(fd); }exit(EXIT_SUCCESS);}
用C语言实现进程的同步与互斥实验
#include "stdio.h"#include "stdlib.h"#include "string.h"struct PCB {char NAME; /*进程名*/int ROUND; /*进程轮转时间片*/int REACHTIME; /*进程到达时间*/int CPUTIME; /*进程占用CPU时间*/int COUNT; /*计数器*/int NEEDTIME; /*进程完成还要的CPU时间*/char STATE; /*进程的状态*/struct PCB *NEXT; /*链指针*/};struct LINK { /*PCB的链结构*/struct PCB *RUN; /*当前运行进程指针*/struct PCB *READY; /*就绪队列头指针*/struct PCB *TAIL; /*就绪队列尾指针*/struct PCB *FINISH; /*完成队列头指针*/};void INIT(LINK *); /*对PCB的链结构初始化*/void INSERT(LINK *); /*将执行了一个单位时间片数且还未完成的进程的PCB插到就绪队列的队尾*/void FIRSTIN(LINK *); /*将就绪队列中的第一个进程投入运行*/void PRINT(LINK *); /*打印每执行一个时间片后的所有进程的状态*/void PR(PCB *); /*打印一个进程的状态*/int CREATE(LINK *,int); /*创建新的进程*/void ROUNDSCH(LINK *); /*按时间片轮转法调度进程*/void main() {LINK pcbs;int i;INIT(&pcbs);i=0;printf("创建5个进程\n\n");while(i《5) {if(CREATE(&pcbs,i+1)==1) {printf("进程已创建\n\n");i++;}elseprintf("进程创建失败\n\n");}FIRSTIN(&pcbs);ROUNDSCH(&pcbs);}void ROUNDSCH(LINK *p) {PCB *pcb;while(p-》RUN!=NULL) {pcb=(PCB *)malloc(sizeof(PCB));strcpy(pcb-》NAME,p-》RUN-》NAME);pcb-》ROUND=p-》RUN-》ROUND;pcb-》REACHTIME=p-》RUN-》REACHTIME;pcb-》CPUTIME=p-》RUN-》CPUTIME;pcb-》COUNT=p-》RUN-》COUNT;pcb-》NEEDTIME=p-》RUN-》NEEDTIME;pcb-》STATE=p-》RUN-》STATE;pcb-》NEXT=p-》RUN-》NEXT;pcb-》CPUTIME++;pcb-》NEEDTIME--;pcb-》COUNT++;if(pcb-》NEEDTIME==0) {pcb-》NEXT=p-》FINISH-》NEXT;p-》FINISH-》NEXT=pcb;pcb-》STATE=’F’;p-》RUN=NULL;if(p-》READY!=p-》TAIL)FIRSTIN(p);}else {p-》RUN=pcb;if(pcb-》COUNT==pcb-》ROUND) {pcb-》COUNT=0;if(p-》READY!=p-》TAIL) {pcb-》STATE=’W’;INSERT(p);FIRSTIN(p);}}}PRINT(p);}}void INIT(LINK *p) {p-》RUN=NULL;p-》TAIL=p-》READY=(PCB *)malloc(sizeof(PCB));p-》READY-》NEXT=NULL;p-》FINISH=(PCB *)malloc(sizeof(PCB));p-》FINISH-》NEXT=NULL;}int CREATE(LINK *p,int n) {PCB *pcb,*q;pcb=(PCB *)malloc(sizeof(PCB));flushall();printf("请输入第%d个进程的名称:\n",n);gets(pcb-》NAME);printf("请输入第%d个进程的轮转时间片数:\n",n);scanf("%d",&(pcb-》ROUND));printf("请输入第%d个进程的到达时间:\n",n);scanf("%d",&(pcb-》REACHTIME));pcb-》CPUTIME=0;pcb-》COUNT=0;printf("请输入第%d个进程需运行的时间片数:\n",n);scanf("%d",&(pcb-》NEEDTIME));pcb-》STATE=’W’;pcb-》NEXT=NULL;if(strcmp(pcb-》NAME,"")==0||pcb-》ROUND《=0||pcb-》NEEDTIME《=0) /*输入错误*/return 0;q=p-》READY;while(q-》NEXT!=NULL&&q-》NEXT-》REACHTIME《=pcb-》REACHTIME)q=q-》NEXT;pcb-》NEXT=q-》NEXT;q-》NEXT=pcb;if(pcb-》NEXT==NULL)p-》TAIL=pcb;return 1;}void FIRSTIN(LINK *p) {PCB *q;q=p-》READY-》NEXT;p-》READY-》NEXT=q-》NEXT;q-》NEXT=NULL;if(p-》READY-》NEXT==NULL)p-》TAIL=p-》READY;q-》STATE=’R’;p-》RUN=q;}void INSERT(LINK *p) {PCB *pcb;pcb=(PCB *)malloc(sizeof(PCB));strcpy(pcb-》NAME,p-》RUN-》NAME);pcb-》ROUND=p-》RUN-》ROUND;pcb-》REACHTIME=p-》RUN-》REACHTIME;pcb-》CPUTIME=p-》RUN-》CPUTIME;pcb-》COUNT=p-》RUN-》COUNT;pcb-》NEEDTIME=p-》RUN-》NEEDTIME;pcb-》STATE=p-》RUN-》STATE;pcb-》NEXT=p-》RUN-》NEXT;p-》TAIL-》NEXT=pcb;p-》TAIL=pcb;p-》RUN=NULL;pcb-》STATE=’W’;}void PRINT(LINK *p) {PCB *pcb;printf("执行一个时间片后的所有进程的状态:\n\n");if(p-》RUN!=NULL)PR(p-》RUN);if(p-》READY!=p-》TAIL) {pcb=p-》READY-》NEXT;while(pcb!=NULL) {PR(pcb);pcb=pcb-》NEXT;}}pcb=p-》FINISH-》NEXT;while(pcb!=NULL) {PR(pcb);pcb=pcb-》NEXT;}}void PR(PCB *p) {printf("进程名:%s\n",p-》NAME);printf("进程轮转时间片:%d\n",p-》ROUND);printf("进程到达时间:%d\n",p-》REACHTIME);printf("进程占用CPU时间:%d\n",p-》CPUTIME);printf("计数器:%d\n",p-》COUNT);printf("进程完成还要的CPU时间:%d\n",p-》NEEDTIME);printf("进程的状态:%c\n\n",p-》STATE);}
C语言怎么在第一个程序中得到第一个程序中的插入的另一个程序的值
==进程间通信。你这样只是简单调用,两个程序咩啥关系吧。进程间通信涉及操作系统,Linux下的管道消息队列,邮箱,还有不同主机间进程通信Socket总之你这样的程序是无法拿到1.exe中的变量的,exe纯机器码。想使用1.exe中的变量,参照1楼回答。
linux c语言进程间通信疑问,上述程序只是想父进程创建一个消息队列,发给子进程消息,但是为什么没有成功
把if((msgid=msgget(IPC_PRIVATE,0666))==-1){printf("error111");exit(0);}放到fork()函数之前就可以了。创建消息队列需要在fork()之前,因为fork()产生的是两个进程,他们的资源是相互独立的。fork()之后创建的消息队列,另一个进程不能识别。