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

📄 clone1.c

📁 gdb-6.8 Linux下的调试程序 最新版本
💻 C
字号:
/*#notarget: cris*-*-elf#output: got: a\nthen: bc\nexit: 0\n*//* This is a very limited subset of what ex1.c does; we just check that   thread creation (clone syscall) and pipe writes and reads work. */#include <stddef.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sched.h>#include <signal.h>#include <sys/types.h>#include <sys/wait.h>int pip[2];intprocess (void *arg){  char *s = arg;  if (write (pip[1], s+2, 1) != 1) abort ();  if (write (pip[1], s+1, 1) != 1) abort ();  if (write (pip[1], s, 1) != 1) abort ();  return 0;}intmain (void){  int retcode;  int pid;  int st;  long stack[16384];  char buf[10] = {0};  retcode = pipe (pip);  if (retcode != 0)    {      fprintf (stderr, "Bad pipe %d\n", retcode);      abort ();    }  pid = clone (process, (char *) stack + sizeof (stack) - 64,	       (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)	       | SIGCHLD, "cba");  if (pid <= 0)    {      fprintf (stderr, "Bad clone %d\n", pid);      abort ();    }  if ((retcode = read (pip[0], buf, 1)) != 1)    {      fprintf (stderr, "Bad read 1: %d\n", retcode);      abort ();    }  printf ("got: %c\n", buf[0]);  retcode = read (pip[0], buf, 2);  if (retcode == 1)    {      retcode = read (pip[0], buf+1, 1);      if (retcode != 1)	{	  fprintf (stderr, "Bad read 1.5: %d\n", retcode);	  abort ();	}      retcode = 2;    }  if (retcode != 2)    {      fprintf (stderr, "Bad read 2: %d\n", retcode);      abort ();    }  printf ("then: %s\n", buf);  retcode = wait4 (-1, &st, WNOHANG | __WCLONE, NULL);  if (retcode != pid || !WIFEXITED (st))    {      fprintf (stderr, "Bad wait %d %x\n", retcode, st);      abort ();    }  printf ("exit: %d\n", WEXITSTATUS (st));  return 0;}

⌨️ 快捷键说明

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