




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux应用编程基础22022-3-22应用编程基础应用编程基础n应用程序编译应用程序编译n进程操作n进程间通信 北京交通大学 电子信息工程学院 32022-3-22应用程序的编译应用程序的编译nGNU工具链nGNU是“GNUs Not Unix”的递归缩写nRichard Stallman创立自由软件基金会(Free Software Foundation)支持GNU计划nGNU软件遵守协议:nGPL:GNU通用公共许可证(GNU General Public License)nLGPL:GNU较宽松公共许可证 (GNU Lesser General Public License)nGFD
2、L : GNU自由文档许可证(GNU Free Documentation License )nGCC(GNU Compiler Collection,GNU编译器集合)nGNU工具与Linux的结合: GNU/Linuxn :/北京交通大学 电子信息工程学院 42022-3-22应用程序的编译应用程序的编译nGNU工具链组成 Binutils: 一组用于编译、链接、汇编和其他调试目的的程序,包括ar, as, ld, nm, objcopy, objdump, ranlib, readelf, size, strings, strip等。 gcc : gnu的编译器集合,Linux环境使用的
3、C语言编译器 glibc: gnu的C语言标准函数库。该库实现Linux系统函数,例如open、read等,也实现标准C语言库,如printf等。几乎所有应用程序都需要与glibc链接。北京交通大学 电子信息工程学院 52022-3-22应用程序的编译应用程序的编译nGCC 集成了多种编译器的编译程序 支持C, C+, Fortran, Java等语言 可执行文件名字gcc,也可以使用单一语言的编译器 命令行启动命令行启动 gcc 完成编译和连接生成可执行程序,执行此程序 ./北京交通大学 电子信息工程学院 62022-3-22应用程序的编译应用程序的编译nGCC编译选项编译选项 从C语言源程
4、序生成可执行代码文件的过程预处理编译(生成汇编代码) 汇编 连接GCC用文件名后缀判断编译类型,也可用-x选项强迫GCC从哪个阶段开始用-c, -S, -E选项让编译到某一步结束 -c:编译或汇编源文件,不连接,输出.o文件 -S:编译后停止,不进行汇编,生成汇编代码.s文件-E:预处理后停止,不编译,预处理后送到stdout 用用-o file指定输出文件名,哪一个阶段都有效指定输出文件名,哪一个阶段都有效。 例如:gcc o hello北京交通大学 电子信息工程学院 72022-3-22应用程序的编译应用程序的编译nGCC文件类型约定文件类型约定* : 必须处理的C源文件 : 不应被预处理
5、的C源文件 :不应被预处理的C+源文件 : C头文件(不被编译和连接) , ,, : 必须预处理的C+源文件 : 汇编源程序 : 必须预处理的汇编程序 其他:其他扩展名的文件都被作为连接时使用的目标文件北京交通大学 电子信息工程学院 82022-3-22应用程序的编译应用程序的编译nGNU make工具和工具和Makefile命令行调用gcc只能处理简单的源文件较少的程序,复杂的软件项目包含大量源程序和头文件,需要借助make工具来自动编译。 GNU make工具: 自动化管理工具,管理软件编译的内容、方式和时机 自动处理源文件模块之间的包含和引用关系 方便将软件项目的代码分开放在多个源文件中
6、,只对更新的代码进行编译,提高工作效率。 文件Makefile用来告诉make工具如何根据依赖的源文件产生目标代码make工具也可以用来进行一般的文件处理,从多个输入文件来产生输出文件。北京交通大学 电子信息工程学院 92022-3-22应用程序的编译应用程序的编译n代码的代码的Build过程过程 Build工具的目标: 使用build命令从输入文件(依赖文件)产生可执行文件(目标) 可以同时产生多个目标(例如ARM,X86,DSP) 方法:命令行,脚本工具makeBuild工具工具Build 指令指令源文件源文件“ Dependencies”app.capp.cfgapp.happ.x64P
7、app.xv5Tapp.x470MVapp.x86U可执行文件可执行文件 “ Targets”app.oapp.lib“ D”“ CMD”“ T”北京交通大学 电子信息工程学院 102022-3-22应用程序的编译应用程序的编译n基于命令行的基于命令行的build 从输入文件产生一个目标文件从输入文件产生一个目标文件 gcc g c o 从目标代码产生一个可执行文件从目标代码产生一个可执行文件 (app.x86U) gcc g 命令commandflagdependencyflagtargetCommand Line依赖文件目标“D”“CMD”“T”-c = compile only-g =
8、build with debug enabled-o = output filename北京交通大学 电子信息工程学院 112022-3-22应用程序的编译应用程序的编译n利用利用Makefile的基本规则的基本规则 make依赖文件目标“D”“CMD”“T”多种脚本工具可用,例如GNU make, 即gMakeMake利用规则来指定构建命令,依赖文件文件和构建目标Make规则的一般形式MakefileTARGET : DEPENDENCYTAB COMMANDS北京交通大学 电子信息工程学院 122022-3-22应用程序的编译应用程序的编译n利用利用Makefile的基本规则的基本规则 T
9、ARGET : DEPENDENCYTAB COMMANDS命令行 变为简单的Makefile规则app.x86U : gcc g 规则规则 gcc g commandflagdependencyflagtarget当目标依赖目标依赖的比较它自己更新时,执行其后的命令命令gcc。北京交通大学 电子信息工程学院 132022-3-22应用程序的编译应用程序的编译n简单的简单的Makefile* make依赖文件目标“D”“CMD”“T”Makefile gcc c g o gcc g o app.x86U 命令行# Makefile for app.x86U (目标目标)app.x86U : g
10、cc g : gcc g c o Makefile北京交通大学 电子信息工程学院 142022-3-22应用程序的编译应用程序的编译n用户定义变量和包含文件用户定义变量和包含文件 用户定义变量简化Makefile增加可读性 包含文件可以指定路径等include CC := $(CC_DIR)gccCFLAGS := -gLINK_FLAGS := -oapp.x86U : $(CC) $(CFLAGS) $ $(LINK_FLAGS) $ CC_DIR := /usr/bin/.# other paths go hereMakefile变量定义、赋值$变量名 :引用自定义变量引用内建变量北京交
11、通大学 电子信息工程学院 152022-3-22应用程序的编译应用程序的编译n使用内建变量使用内建变量 使用make的内建变量简化Makefile增加可读性 $ = 目标名 $ = 所有依赖文件 $010000000000., 832) = 832. . .北京交通大学 电子信息工程学院 232022-3-22文件操作文件操作n访问文件的两级接口访问文件的两级接口 低级函数低级函数(基于文件描述符)用来访问设备驱动和系统调用,主要包括 open: 打开文件和设备 read: 读打开的文件/设备 write: 写文件或设备 close: 关闭文件/设备 ioctl: 向设备驱动传递控制信息 低级
12、函数对应一个系统调用 高级接口由标准库函数提供。 例如头文件中定义的函数属于标准标准 I/O函数函数库,这些函数可以提供输出缓冲。北京交通大学 电子信息工程学院 242022-3-22文件操作文件操作n文件描述符文件描述符 每个运行的程序称为一个进程,拥有若干与之关联的文件描述符。 文件描述符是非负整数,用来访问文件或设备。 当一个进程请求打开或建立一个文件时,Linux内核会返回一个与该进程关联的文件描述符。 当一个程序启动时,系统通常会给它打开了3个文件描述符: 0:标准输入 STDIN_FILENO 1:标准输出 STDOUT_FILENO 2:标准错误输出 STDERR_FILENO北
13、京交通大学 电子信息工程学院 252022-3-22文件操作文件操作n低级文件访问低级文件访问 :write write系统调用将缓冲区buf中的数据的前面nbytes字节写入文件描述符fildes指定的文件中,返回实际读取的字节数。#include size_t write(int fildes, const void *buf, size_t nbytes);/* */#include #include int main三 if (write(1, “Here is some datan”, 18) != 18) write(2, “A write error has occurred !
14、n”,30); exit(0);$ ./simple_writeHere is some data$北京交通大学 电子信息工程学院 262022-3-22文件操作文件操作n低级文件访问低级文件访问 :read Read 从文件描述符指定的文件中读取最多nbytes字节,将它们放在数据缓冲区buf中,返回实际读取的字节数。#include size_t read(int fildes, void *buf, size_t nbytes);#include int main三 char buffer128; int nread; nread = read(0, buffer, 128); if (
15、nread = -1) write(2, “A read error has occurredn”, 26); if (write(1,buffer,nread) != nread) write(2, “A write error has occurredn”,27);从标准输入读入最多128字节,然后写到标准输出.北京交通大学 电子信息工程学院 272022-3-22文件操作文件操作n低级文件访问低级文件访问 :read Read 从文件描述符指定的文件中读取最多nbytes字节,将它们放在数据缓冲区buf中,返回实际读取的字节数。#include size_t read(int filde
16、s, void *buf, size_t nbytes);#include #include int main三 char buffer128; int nread; nread = read(0, buffer, 128); if (nread = -1) write(2, “A read error has occurredn”, 26); if (write(1,buffer,nread) != nread) write(2, “A write error has occurredn”,27);$ echo hello there | ./simple_readhello there$
17、./simple_readIn this chapter we will be looking at files and directories and how to manipulate them. We will learn how to create files,$北京交通大学 电子信息工程学院 282022-3-22文件操作文件操作n低级文件访问低级文件访问 :open open系统调用建立一个新的文件描述符,它建立一个访问一个文件或设备的通道。成功时返回一个文件描述符(非负整数),失败时返回-1。文件描述符是唯一的,不会与其它进程共享。 参数path是要打开的文件或设备路径名;参数o
18、flags用来说明打开文件要完成的动作。它是一个必要的访问模式和其他可选模式的组合。参数mode只有当动作是建立新文件时才需要。#include int open(const char *path, int oflags);int open(const char *path, int oflags, mode_t mode);北京交通大学 电子信息工程学院 292022-3-22文件操作文件操作n低级文件访问低级文件访问 :open int open(const char *path, int oflags, mode_t mode);n基本文件访问模式基本文件访问模式Mode Mode De
19、scriptionDescriptionO_RDONLY Open for read-onlyO_WRONLY Open for write-onlyO_RDWR Open for reading and writingn可选的文件访问模式可选的文件访问模式 Mode Mode DescriptionDescriptionO_APPEND: 把数据添加到文件尾部.O_TRUNC: 设置文件长度为0, 丢弃已有的内容.O_CREAT: 若需要则按照指定的权限创建该文件.O_EXCL: 与 O_CREAT一起使用, 保证调用者建立文件。其中之一与可选模式进行 “|” 组合北京交通大学 电子信息工程
20、学院 302022-3-22文件操作文件操作n建立文件时指定初始访问权限建立文件时指定初始访问权限 int open(const char *path, int oflags, mode_t mode);n以O_CREAT作为offlag标志调用 open建立新文件时,必须使用第三个参数mode,其取值是由sys/中定义的标志按位OR组合得到。Read permissionWrite permissionExecute permissionOwnerS_IRUSRS_IWUSRS_IXUSRGroupS_IRGRPS_IWGRPS_IXGRPOtherS_IROTHS_IWOTHS_IXOTH
21、open (“myfile”, O_CREAT, S_IRUSR|S_IXOTH);$ ls -ls myfile0 -r-x 1 neil software 0 Sep 22 08:11 myfile*Exle:北京交通大学 电子信息工程学院 312022-3-22文件操作文件操作n低级文件访问低级文件访问 close 用 close中止文件描述符 fildes与文件的关联,使得该文件描述符可以被重新使用。 成功关闭返回0,否则返回-1。#include int close(int fildes);北京交通大学 电子信息工程学院 322022-3-22文件操作文件操作n低级文件访问低级文件访
22、问 ioctl ioctl用来对文件描述符fildes代表的对象实施某种控制功能,功能由参数cmd指定。 函数还可以带有更多参数,取决于特定设备支持的具体功能。 例如,让Linux打开键盘上的LED显示:#include int ioctl(int fildes, int cmd, .);ioctl(tty_fd, KDSETLED, LED_NUM|LED_CAP|LED_SCR);北京交通大学 电子信息工程学院 332022-3-22文件操作文件操作n低级文件访问低级文件访问 lseeklseek用来设定读写文件的指针,确定对文件的下次读写操作的位置。 Offset参数给定相对于whenc
23、e指定位置的偏移量。Whence参数可以为:该调用成功时返回设定位置距离文件起始位置的字节偏移量,失败时返回-1。#include #include off_t lseek(int fildes, off_t offset, int whence); SEEK_SET: offset 为绝对位置 SEEK_CUR: offset 相对于当前位置 SEEK_END: offset 相对于文件结尾北京交通大学 电子信息工程学院 342022-3-22文件操作文件操作n标准输入标准输入/输出的重新定向输出的重新定向* 打开文件得到的新文件描述符总是可用的最小数值,这在某些场合是非常有用的。 例如,重
24、新定向标准输出到一个文件: #include #include int main三 int fd; close(1); fd=open(Myfile, O_WRONLY); if(fd!=-1) printf(Add a line to Myfile.n); write(fd, “Output to a file !n”, 19); close(fd); 北京交通大学 电子信息工程学院 352022-3-22文件操作文件操作n标准标准I/O函数库函数库 标准 I/O库 (stdio)及其头文件 提供了灵活多样的函数来连接底层I/O系统调用。 此标准库现在是ANSI标准 C的一部分,提供复杂的输
25、出格式和输入扫描格式,对某些设备提供缓冲服务提供缓冲服务。 需要打开一个文件建立访问通道。打开的文件用一个指向数据结构的指指针针FILE *来表示,作为其他IO函数的引用参数。 标准IO函数将文件内容看成是数据流。 当程序启动时系统自动打开3个流文件流文件,即 stdin, stdout, 和stderr,代表标准输入、标准输出和错误输出,分别对应于底层文件描述符 0, 1 和 2。北京交通大学 电子信息工程学院 362022-3-22文件操作文件操作n标准标准I/O函数库函数库 在头文件 定义的函数包括以下常用函数 相对于底层文件访问函数,高层函数我们更为熟悉,在此不多讨论。 fopen,
26、fclose fread, fwrite fflush fseek fgetc, getc, getchar fputc, putc, putchar fgets, gets printf, fprintf, and sprintf scanf, fscanf, and sscanf北京交通大学 电子信息工程学院 372022-3-22文件操作文件操作n标准标准I/O函数的类型函数的类型n标准标准I/O 提供三种类型的缓存提供三种类型的缓存n全缓冲:当填满全缓冲:当填满I/O 缓存后才进行实际的缓存后才进行实际的I/O 操作;操作;n行缓冲:当在输入和输出中遇到新换行符行缓冲:当在输入和输出中
27、遇到新换行符(n)时,进行时,进行I/O 操作;操作;n不带缓冲:标准不带缓冲:标准I/O 库不对字符进行缓冲,例如库不对字符进行缓冲,例如stderr;nfopen函数返回一个函数返回一个FILE*指针,指向对应的数据流指针,指向对应的数据流n打开文件分为文本文件和二进制文件打开文件分为文本文件和二进制文件n二进制文件可用二进制文件可用fread和和fwrite函数读写函数读写n文本文件可用字符读写函数操作文本文件可用字符读写函数操作n字符输入输出:字符输入输出: fgetc三和三和fputc三,一次仅读写一个字符三,一次仅读写一个字符n行输入输出:行输入输出:gets三,三,puts三,三
28、,fgets三,三,fputs三,一次操作一行三,一次操作一行n格式化输入输出:可以指定输入输出的具体格式,格式化输入输出:可以指定输入输出的具体格式,printf、fprintf,sprintf,scanf,fscanf,sscanf,北京交通大学 电子信息工程学院 382022-3-22文件操作文件操作n标准标准I/O函数的缓冲效果函数的缓冲效果 例子:全缓冲(1024字节缓冲区)#include #include int main三 int i=0; for(i=0;i260;i+) /每次向缓冲区内写4个字符 /*printf(%03dn,i);*/ fprintf(stdout,%0
29、3d ,i); /* fflush(stdout); */ /* sleep(1); */ while(1); /避免程序结束,等待缓冲区填充。北京交通大学 电子信息工程学院 392022-3-22应用编程基础应用编程基础n应用程序编译n文件操作n进程操作进程操作n进程间通信北京交通大学 电子信息工程学院 402022-3-22进程操作进程操作nLinux进程进程 “Everything in Unix is a file. Everything in Unix is a file. Everything in Unix that is not a file is a process Ever
30、ything in Unix that is not a file is a process” 进程 程序的一个运行实例 一个程序可以同时有多个运行实例 与进程相关的数据: 打开的文件,分配的内存,进程ID,父进程ID,优先级,状态 进程相互独立,并发执行. 进程由操作系统调度。 Linux用task数据结构来管理进程,其中包含了描述进程的PID,PPID等数据。北京交通大学 电子信息工程学院 412022-3-22进程操作进程操作nLinux进程进程n进程封装了一个程序以及与其相关的所有资源。进程封装了一个程序以及与其相关的所有资源。n每个进程程序有自己的进入点每个进程程序有自己的进入点ma
31、in三函数三函数n每个进程有自己的虚拟内存空间,与其他进程内存空间隔离。每个进程有自己的虚拟内存空间,与其他进程内存空间隔离。例:显示当前所有的用户进程$ ps -ef例:显示当前终端上运行的进程% psPID TTY TIME CMD21693 pts/8 00:00:00 bash21694 pts/8 00:00:00 ps北京交通大学 电子信息工程学院 422022-3-22进程操作进程操作nLinux进程进程 显示进程自己ID和父进程ID#include #include int main 三printf (“The process ID is %dn”, (int) getpid
32、三);printf (“The parent process ID is %dn”, (int) getppid 三);return 0;北京交通大学 电子信息工程学院 432022-3-22进程操作进程操作n并行执行的进程并行执行的进程/ int main(int argc, char *argv)while(condition = TRUE)callAudioFxn三;callVideoFxn三;/ , handles audio onlyint main(int argc, char *argv) while(condition = TRUE)callAudioFxn三;方法方法1:在一
33、个进程中处理音频和视频:在一个进程中处理音频和视频/ , handles video onlyint main(int argc, char *argv) while(condition = TRUE)callVideoFxn三;方法方法2:在不同进程中分别处理音频和:在不同进程中分别处理音频和视频视频分开两个进程的好处:分开两个进程的好处: 不同的处理速率,不同的优先级 可能需要多个音频/视频通道(模块化)1.需要各自内存保护北京交通大学 电子信息工程学院 442022-3-22进程操作进程操作n在终端中观察进程在终端中观察进程nps ux 列出属于当前用户的所有进程nps aux 列出运行
34、在系统上的所有进程nps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDbart 3039 0.0 0.2 5916 1380 pts/2 S 14:35 0:00 /bin/bashbart 3134 0.0 0.2 5388 1380 pts/3 S 14:36 0:00 /bin/bashbart 3190 0.0 0.2 6368 1360 pts/4 S 14:37 0:00 /bin/bashbart 3416 0.0 0 0 pts/2 R 15:07 0:00 bash .PID: Process idVSZ
35、: Virtual process size (code + data + stack)RSS: Process resident size: number of KB currently in RAMTTY: TerminalSTAT: Status: R (Runnable), S (Sleep), D (Uninterrupted sleep), Z (Zombie), T(Traced)北京交通大学 电子信息工程学院 452022-3-22进程操作进程操作n管理背景任务进程管理背景任务进程n启动任务在背景运行 ./sleep 30 &n显示同一个shell里面背景任务 jobs
36、 -l 1- sleep 30 &n把最后一个/ 第n个背景任务放到前台运行 fg fg %nn把当前任务放到背景去运行 Ctrl-Z bgn中止第n个任务 kill %n北京交通大学 电子信息工程学院 462022-3-22进程操作进程操作n/proc虚拟文件系统虚拟文件系统 该目录下的虚拟文件给出系统和进程相关信息/proc/version 操作系统版本 /proc/cpuinfo处理器信息/proc/ 进程ID目录下为该进程信息 cmdline 命令行 cwd 当前目录 environ 环境变量 fd/ 子目录,打开的文件描述符 maps 映射到进程地址空间的文件,程序,库文件,
37、ets exe 可执行映像的符号连接 . . .北京交通大学 电子信息工程学院 472022-3-22进程操作进程操作n在程序中建立新进程在程序中建立新进程n系统中所有进程都是从一个原始进程分裂出来,这个原始进程是启动时建立的。n当使用fork系统调用时,两个进程执行相同的代码。n可以检测谁是新进程并让它执行另外一个程序(调用exec)将一个执行的将一个执行的进程分裂为进程分裂为两个相同的环境两个相同的环境新进程替代新进程替代老进程但维持老进程但维持以前的环境以前的环境启动新进程启动新进程同时同时保留老进程保留老进程forkexecfork + exec北京交通大学 电子信息工程学院 4820
38、22-3-22进程操作进程操作n在在C程序中复制进程程序中复制进程n调用系统调用函数fork建立一个新进程.nFork建立的子进程克隆了父进程的数据和环境n当从fork返回时,两个进程运行相同的程序,程序如何知道处在哪一个进程中?n对于父进程,Fork会返回子进程的PID,对于子进程,fork返回0。#include #include pid_t fork(void);北京交通大学 电子信息工程学院 492022-3-22进程操作进程操作n在在C程序中复制进程程序中复制进程 Which is which ? pid_t new_pid; new_pid = fork三; switch(new_
39、pid) case -1: /* Error */ break; case 0: /* Its child */ break; default: /*Its parent*/ break; 北京交通大学 电子信息工程学院 502022-3-22进程操作进程操作n等待进程结束等待进程结束int main三 pid_t pid; int status; pid = fork三; switch(pid) case -1: pprintf(fork failed); exit(1); case 0: printf(Im the child!n); exit(0); default: printf(Im
40、 the parent!n); wait(&status); if (WIFEXITED(status) printf(Child exist with status of %dn, WEXITSTATUS(status); exit(0);#include #include #include #include #include 北京交通大学 电子信息工程学院 512022-3-22进程操作进程操作n建立进程执行新程序建立进程执行新程序pid_t pid;if (pid = fork三) int status; printf(Im the parent!n); wait(&st
41、atus); else printf(Im the child!n); execve(“/bin/ls”, argv, envp);此调用将会用存储在指定路径中的程序替换内存中的程序映像(代码和数据)。先前打开的文件描述符,优先级和其他属性保持不变。北京交通大学 电子信息工程学院 522022-3-22进程操作进程操作n执行新程序例子执行新程序例子#include #include #include #include int main 三 /* 传递给“ls”命令的参数列表*/ char* arg_list = ls, -l, /,NULL ; spawn (ls, arg_list); pr
42、intf (done with main programn); return 0;北京交通大学 电子信息工程学院 532022-3-22进程操作进程操作n执行新程序例子执行新程序例子#include #include #include #include int main 三 /* 传递给“ls”命令的参数列表*/ char* arg_list = ls, -l, /,NULL ; spawn (ls, arg_list); printf (done with main programn); return 0;int spawn (char* program, char* arg_list) p
43、id_t child_pid; /* 复制一个进程*/ child_pid = fork 三; if (child_pid != 0)/* 这是父进程,返回. */ sleep(30);/*父进程结束前可观察僵尸子进程*/ return child_pid; else /*子进程,执行程序 ls. */ execvp (program, arg_list); /*execvp函数只有出错时才返回 */ fprintf (stderr, An error occurredn); abort 三; 北京交通大学 电子信息工程学院 542022-3-22进程操作进程操作nexec函数族函数族 用来替
44、换当前进程执行的程序 不同的变种,启动进程和传递参数的方式有差别。 以p结尾的形式在环境变量PATH中搜索程序的位置 以e结尾的形式可传递自定义的环境变量#include char *environ;int execl(const char *path, const char *arg0, ., (char *)0);int execlp(const char *file, const char *arg0, ., (char *)0);int execle(const char *path, const char *arg0, ., (char *)0, char *const envp);
45、int execv(const char *path, char *const argv);int execvp(const char *file, char *const argv);int execve(const char *path, char *const argv, char *const envp);北京交通大学 电子信息工程学院 552022-3-22进程操作进程操作nexec函数族函数族#include /* Exle of an argument list */* Note that we need a program name for argv0 */char *cons
46、t ps_argv = “ps”, “ax”, 0;/* Exle environment, not terribly useful */char *const ps_envp = “PATH=/bin:/usr/bin”, “TERM=console”, 0;/* Possible calls to exec functions */execl(“/bin/ps”, “ps”, “ax”, 0); /* assumes ps is in /bin */execlp(“ps”, “ps”, “ax”, 0); /* assumes /bin is in PATH */execle(“/bin/ps”, “ps”, “ax”, 0, ps_envp); /* passes own environment */execv(“/bin/ps”, ps_argv);execvp(“ps”, ps_argv);execve(“/bin/ps”, ps_argv, ps_envp);北京交通大学 电子信息工程学院 562022-3-22进程操作进程操作n进程退出进程退出n发生下列情况之一进程退出发生下列情况之一进程退出:n从从main函数返回函数返回.n调用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高考数学试题分类汇编:函数的概念与性质解析版
- 常见中医护理技术在临床中的应用
- 蒸发空冷器知识培训总结课件
- 2025年山东省烟台市中考化学试题(解析版)
- 2025年版个人租房合同解除协议书模板
- 叉车进厂实操考试题库及答案
- 现代公共关系题目及答案
- 2025年农村土地转让协议书范本
- 2025深入理解合同法:实践中的感悟与启示
- 餐饮营销经理考试试题及答案
- 骨关节结核教案
- 部编版一年级上册语文研课标说教材课件
- 楼板厚度检测报告
- 纳米材料ppt课件精品课件
- 精神发育迟滞课件
- 最新VTE指南解读(静脉血栓栓塞症的临床护理指南解读)
- 旅行社计调实务课件完整版电子教案
- 乌有先生传(原文+注释+译文)精编版
- DB53∕T 1022-2021 三七栽培技术规程
- 【老师必备】部编版三年级语文上册第一单元【集体备课】
- 《基础笔译》课程教学大纲
评论
0/150
提交评论