控制台程序咋和GUI程序通信
首先,进程间通信和是否是控制台/GUI程序应当没有任何关系。实际上,很多操作系统压根就没有控制台/GUI程序的区别。然后,调用外部程序也不需要(通常意义上的)进程间通信。C标准库就提供了最简陋的函数,用于直接启动另一个外部进程。操作系统通常会提供更完备的API,用于启动另一个进程。
■网友
请分别搜索以下关键字Windows控制台重定向Linux控制台重定向Python Extending and EmbeddingGDB/MI
■网友
这两天一直在找这个问题的解决方案.之前我也问过这个问题c++和外部程序交互问题? - 编程和题主想的一样, 我是是注意到code::blocks可配置编译器连接器这个问题后想到这个的。这么炫酷的技能怎么能不会呢?我们从文件描述符说起。
这是\u0026lt;\u0026lt;unix环境高级编程\u0026gt;\u0026gt;的一张图。每个进程都有自己的一个进程表项,这是一个数组(上学期看了点Linux的源码,如果没记错的话。管它,用什么都可以)。进程表项保存着文件表。这个结构体记录了打开文件的状态和文件自身的信息(文件在哪存着,文件长度等)。图很清晰的表达了进程怎么维护打开文件的。最后就是v节点信息,我们知道Linux下每个文件都有一个inode号。i节点记录着通过inode号得到的文件信息。也就算通过inode号码,获取inode信息;根据inode信息,找到文件数据所在的block,读出数据。也许你会说我们不通过文件名打开文件的吗?恩,其实文件名只是为了方便我们的使用,操作系统是用inode来识别文件的。然后回到我的实现,我们知道每个进程都会有三个标准stream用来交互:stdin,stdout,stderr。这三个IO是内核启动的时候默认打开这三个I/O设备文件,他们也分别的文件描述符为 0, 1, 2。这也就是说我们可以像操作文件一样操作IO。是的我们只需要将文件表换成你想重定向的文件就可以了。向下面这样:
【控制台程序咋和GUI程序通信】
这就是./xxx.out \u0026gt; xxx.txt的实现原理。在程序中我们可以通过dup2()这个系统调用来重定向:int fd_in = open("in.txt", O_RDONLY); int fd_out = open("out.txt", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd_in \u0026gt; 0 \u0026amp;\u0026amp; fd_out \u0026gt; 0) { // 看下面两句 dup2(fd_in, 0); //stdin重定向到in.txt dup2(fd_out, 1); //stdout \u0026gt; out.txt // call shell command system("sort"); close(fd_in); close(fd_out); } else { // ... error handling }
恩?不对啊,你这不行啊?我要的是用一个GUI程序打开一个命令行,让GUI给命令行的IOStream重定向。额~我在Linux上的确没有自己去实现,但同样有一个系统调用可以完成这件事情:popen()。popen_百度百科接下来我们谈谈管道。这是这个问题产生的关键和需求妥协后的折中产物。以"稳定压倒一切"为原则的操作系统设计者们,为了不让我们可以随意动内存(特别是其它进程的内存)和便于内存管理。所以我拿到的需要操作系统支持的资源通常都不会是指针。每个进程间也是相互隔绝的。然而像问题这样的,我们必须共享进程间的资源怎么办?当然还是要拿操作系统是问,毕竟是他实现的隔离。于是管道也就应运而生。操作系统在内核缓存需要共享给其它进程的数据,维护进程间的通信。总之,解决题主的问题就需要这些。我在windows下自己实现了下。win下没有像popen()这样创建管道,调用 fork 产生一个子进程。然后通过管道交互的好函数让我们用。但我们可以通过两个函数组合来完成。CreateProcess(),CreatePipe()。CreateProcess()的倒数第二个参数可以将IOstream重定向到管道。帖代码。
推荐阅读
- 招聘都要学历,何来程序员不看学历
- 银行系统的研发岗(程序员)是不是很难进(校招)推广到国企的研发岗(程序员)呢
- 坐标合肥,请问在哪里能捕捉到程序员这种生物他们大都出现在哪里呢
- 程序猿和产品汪能愉快的一起谈恋爱嘛
- 怎样成为一名合格的Python程序员?
- 我是程序猿养了条狗,取啥名字好
- 送程序员男友苹果无线耳机还是专业品牌耳机
- 女程序媛怎样追求男程序员
- 阿里程序员网上招人的情况为何如此多见
- 朋友圈权限被破解,怎样反破解