我发现了函数read()
,但我并不了解所有内容。
这是我的代码:
#include <unistd.h>
#include <stdio.h>
int main(void)
{
char array[10];
int ret;
printf("read : ");
fflush(stdout);
array[sizeof(array) - 1] = '\0';
ret = read(STDIN_FILENO, array, sizeof(array) - 1);
printf("array = %s\n", array);
printf("characters read = %d\n", ret);
//getchar();
return (0);
}
以下是正在运行的程序的示例:
$> ./a.out
read : hi guys how are you
array = hi guys h
characters read = 9
$> ow are you
zsh: command not found: ow
$>
为什么在程序结束后启动shell命令?
我注意到如果我取消注释getchar()
行,这种奇怪的行为就会消失。如果有人有想法,我想了解发生了什么:)
答案 0 :(得分:3)
您对read
的来电正在读取您所输入内容的前9个字符。其他任何东西都会留在输入缓冲区中,这样当你编程退出时,shell会改为读取它。
您应该检查read
的返回值,以便了解已阅读的内容,因为它不能保证它是您要求的金额,并且还会使用返回的值表示错误。
读入的字符串也不会以空值终止,因此您还应该使用返回值(如果为正)将NUL字符放入,以使您的字符串有效。
如果你想阅读整行,你需要设置一个循环,并确定何时有行尾字符(很可能是'\n'
)。
答案 1 :(得分:2)
您键入了大约20个字符,但只能使用pandas 0.20.1
读取9个字符。之后的所有内容都留在了终端驱动程序的输入缓冲区中。因此,当程序退出后shell调用read()
时,它会获得该行的其余部分,并尝试将其作为命令执行。
为了防止这种情况发生,你应该继续阅读,直到你到达终点。