system函数

system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。

与exec的区别

1、system()和exec()都可以执行进程外的命令,system是在原进程上开辟了一个新的进程,但是exec是用新进程(命令)覆盖了原有的进程。
2、system()和exec()都有能产生返回值,system的返回值并不影响原有进程,但是exec的返回值影响了原进程。

NAMEsystem - execute a shell command
SYNOPSIS#include <stdlib.h>int system(const char *command);

system()函数的返回值如下:
成功,则返回进程的状态值;
sh不能执行,返回127;
失败,返回-1;

system()函数的源码int system(const char * cmdstring)
{pid_t pid;int status;if(cmdstring == NULL){return (1); //如果cmdstring为空返回非零值,一般为1}if((pid = fork())<0){status = -1; //fork失败返回-1}else if(pid == 0){execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);_exit(127); // exec执行失败返回127,注意exec只在失败时才返回现在的进程,成功的话现在的进程就不存在}else //父进程{while(waitpid(pid, &status, 0) < 0){if(errno != EINTR){status = -1; //如果waitpid被信号中断则返回-1break;}}}return status; //如果waitpid成功则返回子进程的返回状态
}

用system函数代替上文的exec函数编程

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/wait.h>int main()
{pid_t pid;int data=10;while(1){printf("please input a data\n");scanf("%d",&data);if(data==1){pid=fork();if(pid>0){wait(NULL);}if(pid==0){//                              execl("./changedata","changedata","config.txt",NULL);system("./changedata config.txt");}}else{printf("wait,do nothing\n");}}return 0;
}
execl里调用的changedata可执行文件代码#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>int main(int argc,char **argv)
{int  fdsrc;char *readbuf=NULL;if(argc<2){printf("param error\ni");exit(-1);}fdsrc=open(argv[1],O_RDWR);int size=lseek(fdsrc,0,SEEK_END);lseek(fdsrc,0,SEEK_SET);readbuf=(char *)malloc(sizeof(size)+8);int n_read=read(fdsrc,readbuf,size);char *p=strstr(readbuf,"LENG=");if(p==NULL){printf("not found\n");exit(-1);}p=p+strlen("LENG=");*p='5';lseek(fdsrc,0,SEEK_SET);int n_write=write(fdsrc,readbuf,strlen(readbuf));close(fdsrc);return 0;
}

Linux系统编程—进程—system函数相关推荐

  1. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  2. 【Linux系统编程】vfork() 函数详解

    00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...

  3. 【Linux系统编程】fork()函数详解

    00. 目录 文章目录 00. 目录 01. 进程创建函数 02. 父子进程结构 03. 父子进程地址空间 04. 附录 01. 进程创建函数 #include <sys/types.h> ...

  4. Linux 系统编程 -进程概念篇

    Linux系统编程-进程篇 冯诺依曼体系结构 冯诺依曼的两个重要思想 当代计算机的三级缓存 操作系统 操作系统的概念 操作系统的组成 操作系统作用 Linux下的操作系统体系 进程 进程概念 进程特性 ...

  5. Linux系统编程——进程

    一.进程概念 基础 程序:死的.只占用磁盘空间. --剧本 进程:活的.运行起来的程序.占用内存,cpu等系统资源. --戏 并发 并发的出现基于CPU的发展.然后有了多道程序设计(多进程并发执行). ...

  6. Linux系统编程:fork函数的使用【循环创建N个子线程】

    fork函数介绍 在linux下面进行系统编程,一定要养成一个好习惯,不懂的函数 直接 找男人,用man 指令进行查看,虽然是全英文 但是要强迫自己 学会看英文文档!下面是介绍,我们看重点. FORK ...

  7. Linux系统编程 进程控制

    文章目录 01. 学习目标 02. 进程和程序 (理解) 03. 单道.多道程序设计(了解) 3.1 单道程序设计 3.2 多道程序设计 04. 并行和并发(理解) 05. MMU(了解) 06. 进 ...

  8. 【Linux系统编程】fork() 函数详解

    需要的头文件: #include <sys/types.h> #include <unistd.h> pid_t fork(void); 功能: 用于从一个已存在的进程中创建一 ...

  9. Linux系统编程——进程替换:exec 函数族

    在 Windows 平台下.我们能够通过双击运行可运行程序.让这个可运行程序成为一个进程:而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是,假设我们本来就执行着一 ...

最新文章

  1. hive根据已有表创建新表_Hive基础之创建表
  2. 图解|通用搜索引擎背后的技术点
  3. 卧底各大程序员圈,才知道什么才是牛逼的程序员!
  4. doxygen注释规范示例(C++)
  5. 瞒不住了,难怪.NET进大厂这么难!
  6. 状态模式 设计模式_设计模式:状态
  7. mysql分布式如何实现原理_分布式通讯协议实现原理
  8. modelsim仿真不出波形_直接扩频通信(下)仿真
  9. 使用SVG画一个罗盘
  10. 尚学堂视频笔记五:IO流
  11. 0528班宋ww:回顾刚来的那一天还历历在目,不禁感概一番
  12. TMB:肿瘤突变负荷简介
  13. Unity之Animation
  14. JS中 ?? 与 || 的区别
  15. 人工智能会否让人类失业?新职业“指令师”即将诞生
  16. 深力科电子~LM317MBDTRKG 线性电压稳压器
  17. kingscada检测服务器状态,基于云服务器的状态检测平台
  18. dell服务器硬盘锁_DELL服务器有两个硬盘闪黄灯是什么意思
  19. onlyoffice学习记录-安装与Demo运行
  20. 请编写C程序,输入5个不同的且为字符格式的学生编号,将其先由大到小排序,再将最大的学生编号和最小的学生编号互换位置,然后输出此时5位学生的编号。 输Л 输入5位学生的编号(只含数字字、英文字母或空格)

热门文章

  1. 智能优化算法:人工蜂鸟算法 - 附代码
  2. 台式优选TFN PM5100 高性能无线电综合测试仪
  3. 浏览器工作原理学习(二十一)
  4. 情指勤舆一体化实战平台建设方案
  5. linux哈希函数,OpenSSL下hash函数
  6. 《金刚经》可以化解疠气
  7. 用万元级回音壁看电竞比赛是什么感受?飞利浦Fidelio B97回音壁初体验
  8. 首位跨界艺术圈的链游平台:链游玩家与悦尚里达成战略合作
  9. uni-app模板的导入简单案例
  10. android 图片 国际化,Android 语言国际化(+图片)