⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 launcher.c

📁 这个是学习嵌入式开发的重要例子
💻 C
字号:
#include <stdio.h>#include <unistd.h>#include <string.h>#include <errno.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/types.h>void child_process_main(int argc, char **argv);int main(int argc, char **argv){  pid_t pid;  if (argc < 2)  {    fprintf(stderr, "Please specify a command and it's parameters.\n");    exit(1);  }#if 0  if (setsid() == (pid_t) - 1)  {    fprintf(stderr, "setsid() failed: %s\n", strerror(errno));    exit(1);  }#endif  if ((pid = fork()) < 0)  {    fprintf(stderr, "fork() failed: %s\n", strerror(errno));    exit(1);  }  else if (pid == 0)  {    //pid_t setsid(void);    //setpgid();#if 0    close(0);    close(1);    close(2);#endif#if 1    if (setsid() == (pid_t) - 1)    {      fprintf(stderr, "setsid() failed: %s\n", strerror(errno));      exit(1);    }#endif    child_process_main(argc, argv);    exit(0);  }  pid_t returned_pid;  int status;  returned_pid = wait(&status);  if (returned_pid < 0)  {    fprintf(stderr, "wait() failed: %s\n", strerror(errno));    exit(1);  }  else  {    if (returned_pid == pid)    {      fprintf(stdout, "child process terminated.\n");    }  }  for (;;)  {    char *msg = "************launcher is alive.*************\n";    write(1, msg, strlen(msg));    sleep(1);  }  return 0;}void child_process_main(int argc, char **argv){  int return_code;  char *v[1024];  //return_code = execl("/bin/ls", "/bin/ls", "-l", (char *) 0);  //char *v[] = { "ls", NULL };  //return_code = execlp("ls1", "ls1", (char *) 0);  int i;  for (i = 1; i < argc; i++)  {    v[i - 1] = argv[i];  }  v[argc] = NULL;  return_code = execvp(argv[1], v);  if (return_code < 0)  {    fprintf(stderr, "excel() failed: %s\n", strerror(errno));  }  else  {    fprintf(stderr, "excel() successed.\n");  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -