gpt4 book ai didi

c - 在术语中使用反引号打开时屏幕尺寸为 NULL

转载 作者:行者123 更新时间:2023-11-30 19:13:58 24 4
gpt4 key购买 nike

我正在使用 termcaps 编写 C 程序,我需要通过执行以下命令来返回一个值:

more `./program arg1 arg2 arg3 arg4`

如果我的屏幕太小,我的函数 get_winsize 有一个条件。

int     *get_winsize()
{
struct winsize w;
int *ret;

ret = malloc(sizeof(int) * 2);
ioctl(STDOUT_FILENO, TIOCGWINSZ, &w);
ret[0] = w.ws_row;
ret[1] = w.ws_col;
if (ret[0] <= 5 || ret[1] <= 5)
{
printf("screen too small : size %d x %d\n", ret[0], ret[1]);
exit(0);
}
return (ret);
}

当我在没有反引号的情况下启动程序时,我没有问题。但通过反引号我有:

size: No such file or directory
screen: No such file or directory
0: No such file or directory
x: No such file or directory
0: No such file or directory

知道为什么吗?也许反引用会复制没有屏幕的环境?!

最佳答案

首先:您不检查 ioctl 的返回值,这意味着当它失败时,w 结构的结果是未定义的。
其次:当使用反引号时,您会断开程序与终端的连接,因此您的 ioctl 失败。
第三:重新设计程序,使用标准错误而不是标准输出来写入结果。然后像这样运行:

tmpfile=`mktemp`
./program arg1 arg2 arg3 arg4 2> $tmpfile
more `cat $tmpfile`
rm $tmpfile

关于c - 在术语中使用反引号打开时屏幕尺寸为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860142/

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