Tag: stdout

Ncurses和Linux管道

我想用ncurses写一个简单的程序来显示一些数据。 然后,我希望程序以这样的方式写入stdout,然后我可以在命令行上使用管道(|)来管理一些数据。 我目前的尝试不起作用。 我可以使用’>’在文件中看到“GOT HERE”,但还有很多其他内容。 该程序也立即退出。 #include #include int main(int _argc, char ** _argv) { initscr(); /* Start curses mode */ printw(“Hello World !!!”); /* Print Hello World */ refresh(); /* Print it on to the real screen */ getch(); /* Wait for user input */ printf(“GOT HERE”); endwin(); /* End curses mode */ printf(“GOT […]

C:如何将stderr从System-command重定向到stdout或文件?

shell命令$ avrdude -c usbtiny文本输出到stderr。 我无法通过诸如head-less-more之类的命令来阅读它。它不是stdout。 我希望文本stdout或文件。 我怎么能用C做呢? 我试图通过我的上一个问题解决问题,但仍未解决。

将STDOUT和STDERR重定向到C中的套接字?

我正在尝试将STDOUT和STDERR重定向到套接字。 我做了: if(fork() == 0) { dup2(newsock, STDOUT_FILENO); dup2(newsock, STDERR_FILENO); execvp(); } 不知何故,它只显示了输出的第一个小部分。 例如,当我尝试执行ls或mkdir时,它显示在“mkdir”上。 有什么问题? 我尝试过它可以工作,但我只能重定向STDOUT或STDERR之一 close(1); dup(newsock); 非常感谢。

如何在C中关闭stdout和stderr?

我需要为我的一个C程序关闭stdout和stderr。 如果不退出程序执行,怎么可能?

在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); 我很困惑这三个’知道’他们是如何重定向三个标准*。 特别是因为最后两个命令是相同的。 有人可以解释或指出我正确的方向吗?

为什么printf()在睡眠前没有打印任何东西()?

我只是用Kernighan和Ritchie的书学习C语言; 我是第四章的基础知识(函数)。 前几天我对sleep()函数感到好奇,所以试着像这样使用它: #include #include int main(void) { printf(” I like cows.”); sleep(5); return 0; } 问题是程序的输出,看起来它首先是sleep()然后是printf() ,换句话说,它等待五秒然后打印字符串。 所以我想,也许程序会如此快速地sleep() ,以至于它不会让printf()像我想要的那样完成他的工作,即打印字符串然后再睡觉。 如何显示字符串然后让程序进入睡眠状态? 编译器是OpenBSD 4.3中的GCC 3.3.5(propolice)。 PS我不知道你如何正确地放置预处理器线。

撤消打印到命令行的换行符(\ n)

printf(“Error %d\n”, 1); printf(“\nStatus: %d%%”, 50); 版画 Error 1 Status: 50% 在此设置中,是否有机会在Error 1\n和\nStatus: 50%之间插入Error 2\n 。 我知道\r和\b可用于更改同一行中的打印文本(例如,如果Error 1和Status: 50%之间只有一个\n Status: 50% ),但是我可以更改前一行中的文本吗? 谢谢!

fork()打印前的语句两次

我正在尝试使用fork()并重新定向以检查父项中的重定向是否也适用于孩子。 我写了以下简单的程序 #include #include #include int main () { freopen( “error.txt”, “w+t”, stdout ); // From now on, stdout = error.txt printf (” ERROR! WHY DONT U UNDERSTAND?\n”); if ( fork() == 0 ) { printf(” I AM CHILD\n”); exit(0); } else- { printf (” EITHER I AM A PARENT OR SOMETHING GOT SCREWED\n”); } […]

如何将一个子进程中的stdout链接到C中另一个子进程中的stdin?

我一直在乱搞C试图弄清楚如何做到这一点。 假设我有我的主程序,即父进程。 父级创建了三个子进程,每个进程最终将运行程序(但现在这并不重要)。 我想做的就是让第二个孩子的stdin接收第一个孩子的stdout。 然后第三个孩子的标准输出将接收第二个孩子的标准输出。 父进程的stdin / stdout根本没有搞乱。 到目前为止,我得到的是 pipe(procpipe); parentPid = getpid(); for(i = 0; i < 3; i++) { if(getpid() == parentPid) { child[i] = fork(); if(child[i] == 0) { mynumber = i+1; } } } 但是从那里开始,我有点担心如何使用dup2来正确分配我的管道,以及在我的代码的哪一部分插入它。 谷歌和这个网站上有很多关于如何从父母到孩子的管道的例子,但是我还没有看到一个会告诉我如何将孩子的标准输出连接到另一个孩子的标准输入的确切信息。 编辑:忘记提及:假设我的所有变量都已正确初始化。 int’mynumber’是这样的子进程在创建时知道它是哪个数字,所以我可以通过它给出指令 if(mynumber == whatever)

printf减慢了我的程序

我有一个小的C程序来计算哈希值(哈希表)。 我希望代码看起来很干净,但有一些与之无关的东西让我烦恼。 我可以在大约0.2-0.3秒内轻松生成大约一百万个哈希值(以/ usr / bin / time为基准)。 但是,当我在for循环中使用printf()时,程序会减慢到大约5秒钟。 为什么是这样? 如何让它更快? mmapp()ing stdout也许? stdlibc是如何设计的,以及如何改进? 内核怎么能更好地支持它? 如何修改本地“文件”(套接字,管道等)的吞吐量真的很快? 我期待着有趣而详细的回复。 谢谢。 PS:这是一个编译器构造工具集,所以不要害羞进入细节。 虽然这与问题本身无关,但我只想指出细节让我感兴趣。 附录 我正在寻找更多解决方案和解释的程序方法。 确实,管道工作起了作用,但我无法控制“用户”的作用。 当然,我现在正在进行测试,“普通用户”不会这样做。 但是,这并没有改变一个简单的printf()减慢进程的事实,这是我试图找到最佳编程解决方案的问题。 附录 – 令人惊讶的结果 参考时间用于TTY内的普通printf()调用,大约需要4分20秒。 在/ dev / pts(例如Konsole)下进行测试可将输出速度提高到约5秒。 在我的测试代码中使用setbuffer()大小为16384时需要大约相同的时间,对于8192几乎相同:大约6秒。 setbuffer()在使用它时显然没有效果:它需要相同的时间(在TTY上大约4分钟,在PTS上大约5秒)。 令人惊讶的是 ,如果我在TTY1上开始测试然后切换到另一个TTY ,它确实与PTS上的相同:大约5秒。 结论 :内核做了一些与可访问性和用户友好性有关的事情。 呵呵! 通常情况下,无论您在活动时盯着TTY,还是切换到另一个TTY,它都应该同样慢。 课程 :运行输出密集型程序时,切换到另一个TTY!