Tag: stdin

忽略stdin的退格键

我想创建一个程序,强制它的用户输入文本,但不允许他删除任何一个,在C中这样做的简单方法是什么? 我唯一得到的是(c = getchar()) != EOF && c != ‘\b’哪个不起作用。 有任何想法吗?

scanf和fgets有问题

这是为家庭作业分配一些给定的字符串。 我正在提示用户他们想要使用scanf排序的字符串数,根据该数字分配一个数组,然后用fgets获取字符串。 如果字符串的数量是硬编码的,那么一切正常,但添加了scanf以让用户决定搞砸了。 这是代码: #include #include #include #define LENGTH 20 // Maximum string length. int main(void) { int index, numStrings = 0; char **stringArray; printf(“Input the number of strings that you’d like to sort: “); assert(scanf(“%d”, &numStrings) == 1); stringArray = (char **)malloc(numStrings * sizeof(char *)); for (index = 0; index < numStrings; index++) { […]

在ST中将STDIN,STDOUT,STDERR重定向到/ dev / null

在Stevens的UNIX网络编程中,他提到重定向stdin,stdout和stderr,这在设置守护进程时是必需的。 他用以下C代码完成它 /* redirect stdin, stdout, and stderr to /dev/null */ open(“/dev/null”, O_RDONLY); open(“/dev/null”, O_RDWR); open(“/dev/null”, O_RDWR); 我很困惑这三个’知道’他们是如何重定向三个标准*。 特别是因为最后两个命令是相同的。 有人可以解释或指出我正确的方向吗?

如何检查stdin是否仍然没有阻塞打开?

我需要用纯C编写的程序在stdin关闭时停止执行。 在程序主循环中有不确定的工作,并且我无法在那里使用阻塞检查(如getc() )(没有数据应该到达stdin – 它只是在未知时间保持打开状态)。 我打算在实现inetd,xinetd或其类似物中托管的网络守护程序时使用所描述的function – 它应该在连接保持打开时在stdout上发出数据,并在关闭时正确完成工作。 现在我的程序被托管服务杀死,因为它在连接终止后不会停止。 我想知道将带有O_NONBLOCK标志的fctntl()应用于stdin描述符是否允许我在非阻塞模式下使用read()函数? 我应该以某种方式使用select()吗? PS数据不是假定的,但可能会到达stdin。 一种非阻塞读出方式应该是问题的答案。

无法获取lldb来读取文件输入

我正在使用lldb作为OSX中的独立调试器。 我正在尝试使用文本文件作为输入来调试C可执行文件。 lldb文档指定了以下用于将stdin更改为给定文件的命令: process launch -i 使用此命令,lldb似乎忽略指定的文件,而不是等待键盘输入。 这是预期的行为吗? 如果是这样; 我需要做什么才能真正让进程对我想要的输入文件进行操作? tl; dr:我如何让lldb模仿标准终端执行,如: ./executable <

如何将标准输入读入字符串变量直到C中的EOF?

我得到“Bus Error”试图将stdin读入char*变量。 我只想阅读stdin所有内容并将其放入变量中,然后继续处理变量。 我的守则如下: char* content; char* c; while( scanf( “%c”, c)) { strcat( content, c); } fprintf( stdout, “Size: %d”, strlen( content)); 但不知何故,我总是通过调用cat test.txt | myapp返回“总线错误” cat test.txt | myapp ,其中myapp是上面编译的代码。 我的问题是我如何读取stdin直到EOF变成变量? 正如您在代码中看到的,我只想打印来自stdin的输入大小,在这种情况下,它应该等于文件test.txt的大小。 我以为只使用scanf就足够了,也许是缓冲的方式来读取stdin ?

如何在获得新输入之前清除stdin?

我已经阅读了大约5-10个不同的建议如何清除标准输入,但它们都不适合我的需要。 问题是fflush(stdin)在我的计算机上工作得很好,但不幸的是它似乎无处不在,所以我需要具有相同function的东西。 我尝试的每一种方式都清除了stdin,当它不是空的时候需要用户输入当stdin是空的时候,这意味着它需要输入片刻我不想得到任何东西(+它无论如何丢弃它)。 问题是:在我需要用户输入之前,我可以以某种方式确定stdin是空的吗? (如果没有,那么,然后才以某种方式清除它?)类似于: if (stdin is NOT empty) while (getchar() != ‘\n’) continue; 编辑:问题是我从stdin逐个加载字符,在某些时候,上一次迭代的输入的一部分可能会或可能不会被丢弃。 无论哪种方式,在我要求用户处理另一个输入之前,我需要有明确的stdin输入。 清除缓冲区本身并不是一件大事,问题是当程序到达清除stdin点时输入为空时会发生什么,因为在那一刻程序需要另一个输入,它将被清除吃掉function。 这就是我想要摆脱的东西。 (当我可以使用fflush(stdin);我只知道,对于我的程序的下一行, stdin将是空的,无论如何,没有问题……)

从stdin,C读取未知数量的行

我有一个读取未知大小的标准输入的问题。 实际上它是.txt文件中的一个表,我通过调用参数'<'table.txt来获取stdin。 我的代码应如下所示: #include #include int main(int argc,char *argv[]) { char words[10][1024]; int i=0; while(feof(stdin)==0) { fgets(words[i],100,stdin); printf(“%s”, words[i]); i++; } return 0; } 但有问题我不知道行的nuber,在这种情况下是10(我们知道行中的字符数 – 1024)。 如果有人知道解决方案会很棒。 提前致谢。

什么是标准输入缓冲区?

#include int main(void) { int c; c = getchar(); putchar(c); c = getchar(); putchar(c); c = getchar(); putchar(c); return 0; } 我想了解为什么三次调用的函数只使用一次输入的行。 有人解释说,在这种情况下我们使用标准输入缓冲区,那是一块内存。 我想读一些关于它的东西。 你能告诉我一些资源吗?

在c标准库中定义了stdin?

我在stdio.h中找到了这一行: extern struct _IO_FILE *stdin; 基于这个’extern’关键字,我认为这只是一个声明。 我想知道stdin在哪里定义和初始化?