小编sun*_*sun的帖子

fgets()调用重定向获取异常数据流

我正打算用C语言编写一个shell.以下是源代码:

#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/wait.h>
#include <stdlib.h>

int
getcmd(char *buf, int nbuf)
{
  memset(buf, 0, nbuf);
  fgets(buf, nbuf, stdin);
  printf("pid: %d, ppid: %d\n", getpid(), getppid());
  printf("buf: %s", buf);
  if(buf[0] == 0) {// EOF
    printf("end of getcmd\n");
    return -1;
  }
  return 0;
}

int
main(void)
{
  static char buf[100];
  int fd, r, ret;

  // Read and run input commands.
  while((ret = getcmd(buf, sizeof(buf))) >= 0){
    if(fork() == 0)
      exit(0);
    wait(&r);
  }
  exit(0);
}
Run Code Online (Sandbox Code Playgroud)

当我执行编译后的可执行文件时,将stdin重定向到名为t.sh的文件,其内容为"1111 \n2222 \n",如./myshell <t.sh,输出为: …

c gets multiprocess

6
推荐指数
1
解决办法
139
查看次数

标签 统计

c ×1

gets ×1

multiprocess ×1