我正在制作一个需要彩色输出的简单应用程序.如何让我的输出像emacs和bash一样变色?
我不关心Windows,因为我的应用程序仅适用于UNIX系统.
我正在尝试使用GCC 4.9(实验性)在OS X 10.9上用C编译程序.出于某种原因,我在编译时遇到以下错误:
gcc: fatal error: stdio.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
然后我尝试了一个简单的Hello World程序:
#include <stdio.h>
int main(int argc, const char *argv[])
{
printf("Hello, world!");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
再次,在运行时gcc -o ~/hello ~/hello.c,我得到了同样的错误.我正在使用一个实验版本gcc,但似乎难以置信的是会有一个在导入时产生错误的版本stdio.可能导致此问题的原因是什么,以及如何解决?
我想重开stdin和stdout(也许stderr当我在它)的文件句柄,从而使未来的呼叫printf()或putchar()还是puts()会去到一个文件,以及未来的呼叫getc()和这种将来自一个文件.
1)我不想永久丢失标准输入/输出/错误.我可能希望稍后在程序中重用它们.
2)我不想打开新的文件句柄,因为这些文件句柄必须要么传递很多,要么全局传递(不寒而栗).
3)如果我无法帮助,我不想使用任何open()或fork()其他系统相关的功能.
所以基本上,这样做是否有效:
stdin = fopen("newin", "r");
Run Code Online (Sandbox Code Playgroud)
而且,如果确实如此,我怎样才能得到原来的价值stdin?我是否必须将其存放在一个FILE *以后才能将其取回?
可能重复:
c/c ++函数的源代码
我想知道在哪里可以找到使用的C代码,这样当我写printf("Hello World!")时; 在我的C程序中知道它必须将该字符串打印到STDOUT.我查看了<stdio.h>,但在那里我只能找到它的原型int printf(const char*format,...),但不是内部的样子.
我正在尝试在Visual Studio社区2017上构建解决方案,但我不断收到错误" 无法打开包含文件:'stdio.h' ".我已经阅读了几个类似的问题,但仍然无法解决这个问题.看起来在stdafx.h文件中调用了stdio.h文件.以下是更多细节.有什么建议?(我无法嵌入图片,所以请点击链接进行截图.)
系统详细信息:
Windows 10
Visual Studio Community 2017 v.15.2(26430.6)
- 使用C++安装的桌面开发(屏幕截图:安装列表)
第1步:我用C++编写了着名的Hello World程序.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第2步:我点击了Build> Build Solution.
问题: 'stdio.h':没有这样的文件或目录.完全错误:
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1>stdafx.cpp
1>c:\users\dahiana mini\desktop\learncpp\helloworld\helloworld\stdafx.h(10):
fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
1>Done building project "HelloWorld.vcxproj" -- …Run Code Online (Sandbox Code Playgroud) 如果多个线程同时调用fflush()同一个FILE*变量,是否会发生任何不良事件(如未定义的行为,文件损坏等)?
澄清:我不是指同时写文件.我只是说要同时冲洗它.
线程不会同时读取或写入文件(它们只在临界区内写入文件,一次一个线程).它们只在临界区外冲洗,以便更快地释放关键部分,以便让其他人完成其他工作(文件写入除外).
虽然可能发生一个线程正在写文件(在临界区内),而另一个线程正在刷新文件(在临界区之外).
一个使用它将输出发送到stdout:
println!("some output")
Run Code Online (Sandbox Code Playgroud)
我认为没有相应的宏可以为stderr做同样的事情.
事实证明,对open()与fopen()的整体误解源于ARM上Linux 2.6.14内核中的错误I2C驱动程序.向后移动一个工作位捣乱的驱动程序解决了我试图解决的问题的根本原因.
我试图弄清楚Linux(I2C)中串行设备驱动程序的问题.似乎通过在设备上的写入和读取之间添加定时OS暂停(休眠),事情起作用......(更好).
旁白:I2C的本质是主机读取或写入的每个字节都由线路另一端的设备(从机)确认 - 暂停改进的事情鼓励我将驱动程序视为异步工作 - 这是我的意思无法调和公交车的运作方式.Anyhoo ......
我想无论是想刷新写可以肯定(而不是使用固定的工期暂停),或以某种方式测试读/写事务已完成在多线程友好的方式.
使用的麻烦fflush(fd);是它需要'fd'是流指针(不是文件描述符),即
FILE * fd = fopen("filename","r+");
... // do read and writes
fflush(fd);
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要使用,ioctl()而不使用流指针.即
int fd = open("filename",O_RDWR);
ioctl(fd,...);
Run Code Online (Sandbox Code Playgroud)
建议?
puts "hi"
puts "bye"
Run Code Online (Sandbox Code Playgroud)
我想存储到目前为止的代码的STDOUT(在这种情况下,hi \nbye变成一个变量说'结果'并打印出来)
puts result
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是我已经将R代码集成到我的Ruby代码中,当R代码运行时,其输出被提供给STDOUT,但是在代码内部无法访问输出以进行一些评估.对不起,如果这令人困惑.因此,"放置结果"这一行应该让我高兴和再见.