我想检查用户是否输入了类似于ls&ls &的内容,以便我能够为shell中的后台作业设置bg_flag。但是,以下代码无法对照ls&&进行检查。因为我不希望它被视为一个后台作业(我不确定它在linux shell中是否相同),如果用户输入ls&&或任何最后有多个&的内容。

  if (strstr(args[arg_count-1],"&")!=NULL)
  //if (strcmp(args[arg_count-1],"&")==0)
              {
                bg_flag=1;
                printf("I am a background job %d ",getpid());
              }

请告诉我修理这个的合适方法是什么?

最佳答案

要做到这一点,您需要像shell那样正确地解析命令。通常您会为此定义语法并使用解析器生成器。其他一切都只是猜测,很可能会失败。
例如,考虑一下:

some_program \&&

它以两个与号(&&)结束,但无论如何,它将是一个后台进程,因为第一个与号被转义(\&)。
但是,将后缀标记为“background”也不正确,因为
some_program \\&&

不是后台进程(而是不完整的命令)。
只要你没有定义一个正确的语法,你很可能就不能像我的两个例子所展示的那样正确地理解所有的东西。
另一类问题可能是程序与终端分离(有时称为守护)。它们不是靠壳做背景,而是靠自己做同样的事情。

关于c - 如何检查子字符串的实例是否在字符串的末尾且仅在字符串的末尾(例如使用strstr)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19073090/

10-12 04:49