gpt4 book ai didi

c - 非规范模式不适用于反引号

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:53 24 4
gpt4 key购买 nike

当我使用像这样的反引号启动我的程序时:

cat `./my_program`

我希望我的 read() 能够逐字符读取,它仍然是逐行读取。我终端的非规范模式不起作用。我真的不明白为什么。

这是我的代码:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <term.h>
#include <strings.h>

int main()
{
struct termios term_setting;
char *term;
char buff[10];

term = getenv("TERM");
tgetent(NULL, term);
tcgetattr(STDOUT_FILENO, &term_setting); //
term_setting.c_lflag &= ~(ICANON | ECHO); //set my term in echo and non-canonique mode
tcsetattr(STDOUT_FILENO, 0, &term_setting); //
for (;;){
bzero(buff, sizeof(char) * 10);
read(STDIN_FILENO, buff, 9);
printf("%s\n", buff);
}
return (0);
}

最佳答案

这里似乎有些困惑:你期望什么

cat `./my_program`

生产?

my_program 将标准输入复制到标准输出,在一个无限循环中,即使在到达文件末尾之后,您没有测试,产生意外输出。

shell 在文件中、伪终端中或可能通过管道收集此输出,一旦完成,将其作为命令行参数传递给 cat,但由于您必须 kill my_program 为了完成它的输出,shell 也会中止这个操作。

cat 期望选项和文件名作为命令行参数,可能不是您键入的内容。

关于终端设置的更改,您可以使用 STDIN_FILENO 或仅使用 0 而不是 STDOUT_FILENO,因为您想要更改输入句柄的行为。

关于c - 非规范模式不适用于反引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com