c - 尝试使用 C 子进程打印文件中的单词

标签 c unix fork

目标是为文件中的每个单词创建一个子进程,并让子进程打印该单词。该文件只有以下五个单词,每个单词占一行:

Aachen
Biscay
Capri
Dino
Ellis

问题是,当我尝试打印到文件时,其中一个单词打印了两次。

Aachen
Ellis
Biscay
Capri
Ellis
Dino

这是代码。这看起来很简单,但我不明白为什么我会得到额外的词。

int main (int argc, char *argv[])
{
  char word[50];
  int i;
  pid_t p;

  while (fscanf(stdin, "%s", word) != EOF) {
    i = 0;
    while (i < sizeof(word)) {
      if (word[i] < 'A' || word[i] > 'z') {
        word[i] = '\0';
        break;
      }
      i++;
    }

    p = fork();

    if (p != 0) 
      continue;

    break;
  }

  fprintf(stdout, "%s\n", word);

  return 0;
}

我运行程序如下:

$ ./printwordsout.txt

最佳答案

父亲也在最后打印最后一个字。尝试这个而不是在循环之后打印:

if (p == 0) {
  fprintf(stdout, "%s\n", word);
}
else {
  continue;
}

关于c - 尝试使用 C 子进程打印文件中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16451827/

相关文章:

c - 如何在同一个共享内存段中正确地拥有多个变量

c - 创建链表时不需要创建实际节点吗?

c - bsearch 未能在结构数组中找到字符串成员

c++ - printf 和 fprintf 的不同结果

c - for 循环内出现 fork,进程过多

c - 由于可变排序而导致不同的 RAM 消耗

c - 了解文件截断

linux - 在不同的操作系统中测试程序

perl - 当后台进程在 Perl 中终止时,如何通知我?

perl - 杀死进程本身和所有子进程的最佳方法