《APUE》 第一章 图1-7 程序代码中execlp()部分解析

原创 2015年07月10日 11:24:06
#include "apue.h"
#include <sys/wait.h>

int main()
{
char buf[MAXLINE];
pid_t pid;
int status;

printf("%% ");
while (fgets(buf, MAXLINE, stdin) != NULL)
{
if (buf[strlen(buf) - 1] == '\n')
{
buf[strlen(buf) - 1] = 0; }

if ((pid = fork()) < 0) {
err_sys("fork error!");
}
else if (pid == 0)
{
execlp(buf, buf, (char *)0);
err_ret("can't execute: %s", buf); //如果execlp函数成功,这个好像不会执行啊
exit(127);
}
if ((pid = waitpid(pid, &status, 0)) < 0)
{
err_sys("waitpid error!");
}
printf("%% ");
}
exit(0);
}execlp()函数说明:在子进程中,调用execlp以执行从标准输入读入的命令。这就用新的程序文件替换了子进程原先执行的程序文件。execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了.

相关文章推荐

C++ STL入门教程(7)——multimap(一对多索引),multiset(多元集合)的使用(附完整程序代码)

一、Multimap(一对多索引) C++ Multimap和map说支持是操作相同(除了multimap不支持下标运算),但是Multimap允许重复的元素。 begin() 返回指向第...

可视化第一章实验程序代码

  • 2011年11月29日 22:22
  • 130KB
  • 下载

7中排序算法学习总结(图解+程序代码)

我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。   排序算法大体可分为两种:     一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选...

STM32F1_外部NorFlash存储程序代码

前言 今天总结“STM32F103  外部NorFlash存储程序代码”。今天提供的实例工程是存储程序代码到外部NorFlash,并执行外部NorFlash的代码(既然存储了程序代码,那么肯定也会运行...

C程序代码的常用优化办法(1)

本文讲述在编写C程序代码的常用优化办法,分为I/O篇,内存篇,算法篇。MMX本来我也想归在这里的,但是由于内容和标题不太符和,决定换一个名字,叫MMX技术详解,和H263视频压缩技术中的MMX应用两篇...
  • yanfake
  • yanfake
  • 2012年02月10日 08:49
  • 424

C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)

一、简介 Vectors 包含着一系列连续存储的元素,其行为和数组类似。 访问Vector中的任意元素或从末尾添加元素都可以在O(1)内完成,而查找特定值的元素所处的位置或是在Vector中插入元素...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《APUE》 第一章 图1-7 程序代码中execlp()部分解析
举报原因:
原因补充:

(最多只允许输入30个字)