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

📄 pipe6.c

📁 gdb-6.8 Linux下的调试程序 最新版本
💻 C
字号:
/* Check that writing an inordinate amount of data works (somewhat).#notarget: cris*-*-elf#output: got: a\nexit: 0\n   This test-case will *not* work on host (or for real): the first   pipemax+1 bytes will be successfully written.  It's just for   exercising a rare execution path.  */#include <stddef.h>#include <stdlib.h>#include <stdio.h>#include <limits.h>#include <unistd.h>#include <sched.h>#include <signal.h>#include <errno.h>#include <sys/types.h>#include <sys/wait.h>int pip[2];int pipemax;intprocess (void *arg){  char *s = arg;  char *buf = calloc (pipemax * 100, 1);  int ret;  if (buf == NULL)    abort ();  *buf = *s;  ret = write (pip[1], buf, pipemax * 100);  if (ret != -1 || errno != EFBIG)    {      perror ("write");      abort ();    }  return 0;}intmain (void){  int retcode;  int pid;  int st = 0;  long stack[16384];  char buf[1];  retcode = pipe (pip);  if (retcode != 0)    {      fprintf (stderr, "Bad pipe %d\n", retcode);      abort ();    }#ifdef PIPE_MAX  pipemax = PIPE_MAX;#else  pipemax = fpathconf (pip[1], _PC_PIPE_BUF);#endif  if (pipemax <= 0)    {      fprintf (stderr, "Bad pipemax %d\n", pipemax);      abort ();    }  pid = clone (process, (char *) stack + sizeof (stack) - 64,	       (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)	       | SIGCHLD, "ab");  if (pid <= 0)    {      fprintf (stderr, "Bad clone %d\n", pid);      abort ();    }  while ((retcode = read (pip[0], buf, 1)) == 0)    ;  if (retcode != 1)    {      fprintf (stderr, "Bad read 1: %d\n", retcode);      abort ();    }  printf ("got: %c\n", buf[0]);  if (close (pip[0]) != 0)    {      perror ("pip close");      abort ();    }  retcode = waitpid (pid, &st, __WALL);  if (retcode != pid || !WIFEXITED (st))    {      fprintf (stderr, "Bad wait %d:%d %x\n", pid, retcode, st);      perror ("errno");      abort ();    }  printf ("exit: %d\n", WEXITSTATUS (st));  return 0;}

⌨️ 快捷键说明

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