我不清楚下面的示例代码在输入缓冲区比较中使用!
的情况
/*GLOBAL VARIABLES*/
int pipe_count=0, fd;
static char* args[512];
char *history_file;
char input_buffer[1024];
int main()
{
int status;
char ch[2]={"\n"};
getcwd(current_directory, sizeof(current_directory));
signal(SIGINT, sigintHandler);
while (1)
{
clear_variables();
prompt();
fgets(input_buffer, 1024, stdin);
if(strcmp(input_buffer, ch)==0)
{
continue;
}
if(input_buffer[0]!='!')
{
fileprocess();
filewrite();
}
len = strlen(input_buffer);
input_buffer[len-1]='\0';
strcpy(his_var, input_buffer);
if(strcmp(input_buffer, "exit") == 0)
{
flag = 1;
break;
}
我听不懂if(input_buffer[0]!='!')
在此陈述中,'!'
的含义是表示NULL
或其他的东西。完整的代码非常大,这只是我不清楚的一部分。
我从here检查了!
的ASCII值,但是我无法理解在代码{{中使用input_buffer[0]
1}}等,据我所知是!
,NULL
,NULL
。对我来说,这种'\0'
的东西还不清楚吗?
我不是在这里向操作员不等于询问,即' '
我知道它是如何工作的。但是在 condition2 中有input_buffer[0]!='!'
,这就是我要问的。这意味着什么?
答案 0 :(得分:0)
它不仅是!
,而且是!=
,被称为不等于运算符。
顾名思义,它与==
运算符相反。
在您的情况下,if(input_buffer[0]!='!')
如果if
不等于 true
,则input_buffer[0]
语句将为'!'
。
第二次出现表示字符'!'
,其ASCII值为33。
在您的示例中,它表示处理和写入文件的触发器。只有当缓冲区中的第一个字符不是'!'
时,处理才会发生。
答案 1 :(得分:0)
在Linux中!
运算符有许多用途。
参见此article。
在您的情况下,可能要检查历史记录中的a命令是否作为输入给出。 请参阅本文的第一点。
答案 2 :(得分:0)
与外观完全一样-文字!
。如果该行以!
以外的任何内容开头,则作者想做
fileprocess();
filewrite();
也许以感叹号开头的“命令”之间是有区别的(它们是注释或类似的东西?或者,如果这是某种形式的外壳,它会做一些不同的事情-例如不更新历史记录- it may be related to history expansion?)以及所有其他内容?如果不看其余的代码,也不了解上下文,很难说。