在linux编程中在一个程序怎样获得另一个程序中main函数返回的结果?

来自:    更新日期:早些时候
Linux下,一个程序如何获取另一个程序的打印信息~

后台运行的程序运行时为什么不重定向一下……
exe >> file.log

用fork启动子进程(另外一个程序)。
主进程处理SIG_CHLD信号,用waitpid回收。

说明:两个程序hello.c与hello1.c,hello.c包含主函数main(),生成的执行文件为she。



进程间的通信需要使用消息队列、旗语、共享内存,因为每个程序有自己的堆栈,和上下文,等等,都是独立的,不是线程,上面那些你会用了,就可以传递了,当然,旗语不是一种方式,他是一种锁,一般与共享内存一同使用

是另一个程序吧?
linux中有一个环境变量用来保存上一个程序的返回结果
变量是:$?
你在执行一个程序后可以用echo "$?" 来查看它的返回值(注意是保存上一个程序,每执行一个程序就会更新)

具体是怎样用的呢?
用getenv来获取环境变量的值

你试试 getenv();

功 能: 从环境中取字符串,获取环境变量的值
  头文件: stdlib.h
  用 法:char *getenv(char *envvar);
  函数说明:getenv()用来取得参数enwar环境变量的内容。参数enwar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。

比如
float main()

return 12.33;

编译后可执行文件为 Main
在另一个程序中可以用system(“Main”)来调用可执行文件,但是不知道怎么获得Main的返回值。
system的返回值就是所执行程序的返回值……
system是frok和exec的结合,其中调用了wait函数获取返回状态,而system的正常返回值就是所执行程序的返回值

system()的返回值好像不是可执行文件的返回值,
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
这是函数说明~

只是返回shell命令的返回结果,并不是可执行文件的返回结果,两者是不同的。
你说对的,我看错了
建议你还是用管道等进程间通信方式吧
或者用自己显式调用fork和exec,然后通过waitpid来获得其返回值


在linux编程中在一个程序怎样获得另一个程序中main函数返回的结果?视频

相关评论:
  • 15212114846在linux编程中在一个程序怎样获得另一个程序中main函数返回的结果...
    和冉滕说明:两个程序hello.c与hello1.c,hello.c包含主函数main(),生成的执行文件为she。

  • 15212114846怎么在linux中调用命令行中的命令,比如我想在一个程序中用命令行运行...
    和冉滕Linux编程中在命令行启动另一个可执行文件或调用命令用system函数最简单了,这个函数原理是在你编写的那个程序的内部启动另一个程序或命令,从而创建一个新进程,并等待这个进程执行完毕退出。如果正常执行,system函数将返回被执行程序或命令的退出码;如果无法运行这个程序或命令,将返回错误代码127;如果是...

  • 15212114846linux如何运行c文件linux如何运行
    和冉滕1、在终端窗口中创建一个文件并命名为test.c,在终端输入touchtest.c打开。2、在终端中输入vimtest.c打开这个文件并编写代码。3、在终端中输入gcctest.cgcc编译源文件。4、在a.out文件的目录下在终端里输入.\/a.out即可运行C程序。linux中运行一个程序是怎么运行的?我不太明白你说的是什么意思,L...

  • 15212114846Linux用c语言编程一个计算机程序,用户输入两个数后,输出加减乘除的各个...
    和冉滕&a, &b);while (*p) {switch(*p) {case '+': res = a+b; break;case '-': res = a+b; break;case '*': res = a+b; break;case '\/': if (b)res = a\/b; break;}printf("%f %c %f = %f\\n",

  • 15212114846linux多进程写同一个文件比写多个文件慢
    和冉滕因为多个进程同时写入同一个文件会导致文件IO频繁地被占用。当一个进程要写入文件时,操作系统会将其锁定,以保证数据的正确性和完整性,其他进程在此时就需要等待锁释放后才能继续对文件进行操作。这个过程称为文件锁竞争,会降低程序的并发性能,导致写文件的效率变慢。每个进程都写入不同的文件,则不会...

  • 15212114846在Linux下用C语言编程
    和冉滕常驻内存"的程序却是很容易的.我们只要几行代码就可以做到. 实际上由于Linux是多任务操作系统,我们就是不编写代码也可以把一个程序放到后台去执行的.我们只要在命令后面加上&符号SHELL就会把我们的程序放到后台去运行的. 这里我们"开发"一个后台检查邮件的程序.这个程序每个一个指定的时间回去检查我们的...

  • 15212114846Linux 在进程中启动另一个程序执行,并捕捉程序的运行结果的方法是什么...
    和冉滕用fork启动子进程(另外一个程序)。主进程处理SIG_CHLD信号,用waitpid回收。

  • 15212114846怎样在Linux下编程?需要什么技术?
    和冉滕针对如何学习Linux编程,分享一下作为过来人的经验,希望可以帮助到大家。 环境搭建 如果要在Linux下进行编程,那么首先我们需要有Linux操作系统的环境。通常的做法是下载并安装VMware,然后在VMware下安装Linux操作系统的发行版,比如Ubuntu,CentOS等。当一切安装就绪后,你就拥有一个Linux的编程环境了。如果大家需要相关资料,...

  • 15212114846初学者必知如何在Linux中运行Windows程序Winelinux的wine
    和冉滕Wine是一个应用程序,可以帮助Linux用户在Linux系统上运行Windows应用程序。它模拟了Windows软件编程介面(API),让Windows程序能够与Linux环境中的命令行、X Window等应用程序进行交互。Wine的安装也非常简单,大多数Linux发行版都可以在使用包管理器安装Wine。比如在Ubuntu上,可以使用以下命令:sudo apt-get ...

  • 15212114846linux下,编写一个c语言程序实现...(详细见正文)!急!200分悬赏!_百度知...
    和冉滕char *directory(char *argv) \/*从程序参数取出目录*\/ { int i;for (i=strlen(argv)-1;i;--i)if (argv[i]=='\/'){ argv[i+1]='\\0';break;} return argv;} int main(int argc,char *argv[]){ DIR *dirp;struct dirent *dirst;struct stat finfo;char *path,fname[512],...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网