exec函数族
execlp函数
/*
* @file execlp.c
* @brief 在子进程调用execlp函数来执行ls命令
* @version 1.1 无
* @author 北豼
* @date 2022年5月9日
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();
if(pid == -1)
{
perror("fork error");
exit(1);
}
else if(pid > 0)
{
sleep(1);
printf("parent\n");
}
else
{
execlp("ls", "ls", "-l", "-a", NULL);
}
return 0;
}
execl函数
在子进程调用execl函数来执行自己写的程序execl_while
/*
* @file execl.c
* @brief 在子进程调用execl函数来执行自己写的程序execl_while
* @version 1.1 无
* @author 北豼
* @date 2022年5月9日
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();
if(pid == -1)
{
perror("fork error");
exit(1);
}
else if(pid > 0)
{
sleep(1);
printf("parent\n");
}
else
{
execl("/home/beipi2/xitongtest/execl_while", "execl_while", NULL);
}
return 0;
}
/*
* @file execl_while.c
* @brief 被execl.c子函数中execl函数执行的程序
* @version 1.1 无
* @author 北豼
* @date 2022年5月9日
*/
#include <stdio.h>
#include <unistd.h>
int main(void)
{
while(1)
{
sleep(1);
printf("----------\n");
}
return 0;
}
execvp函数
/*
* @file execvp.c
* @brief 在子进程用execvp.c函数调用ls命令
* @version 1.1 无
* @author 北豼
* @date 2022年5月9日
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();
if(pid == -1)
{
perror("fork error");
exit(1);
}
else if(pid > 0)
{
sleep(1);
printf("parent\n");
}
else
{
char *argv[] = {"ls", "-l", "-a", NULL};
execvp("ls", argv);
}
return 0;
}
exec函数族一般规律
dup2 —— 复制文件描述符
使用dup2将输出的信息重定向到文件里
/*
* @file dup2.c
* @brief 使用dup2将输出的信息重定向到文件里
* @version 1.1 无
* @author 北豼
* @date 2022年5月9日
*/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd;
fd = open("ps.out", O_WRONLY|O_CREAT|O_TRUNC, 0644);
if(fd < 0)
{
perror("open ps.out error");
exit(1);
}
dup2(fd, STDOUT_FILENO);
execlp("ps", "ps", "ax", NULL);
//close(fd);
return 0;
}