我试图在应用程序的单独日志文件中编写不同类型的条目.由于我试图找出的原因,所有条目都出现在所有日志文件中.我能做错什么?
我想只有关键条目进入/tmp/log/critical.log并调试条目进入/tmp/log/debug.log文件,而所有的进入者都可以进入/tmp/log/all.log日志文件.
以下是/etc/rsyslog.conf文件中的条目
local0.* /tmp/log/all.log
local0.alert /tmp/log/alert.log
local0.crit /tmp/log/critical.log
local0.debug /tmp/log/debug.log
local0.emerg /tmp/log/emergency.log
local0.err /tmp/log/error.log
local0.info /tmp/log/info.log
local0.notice /tmp/log/notice.log
local0.warning /tmp/log/warning.log
Run Code Online (Sandbox Code Playgroud)
我的示例c程序编写syslog条目...
#include<syslog.h>
main()
{
openlog("myapp",LOG_CONS|LOG_PID|LOG_NDELAY,LOG_LOCAL0);
syslog(LOG_EMERG|LOG_LOCAL0,"Emergency",getuid());
syslog(LOG_ALERT|LOG_LOCAL0,"Alert",getuid());
syslog(LOG_CRIT|LOG_LOCAL0,"Critical",getuid());
syslog(LOG_ERR|LOG_LOCAL0,"Error",getuid());
syslog(LOG_WARNING|LOG_LOCAL0,"Warning",getuid());
syslog(LOG_NOTICE|LOG_LOCAL0,"Notice",getuid());
syslog(LOG_INFO|LOG_LOCAL0,"Information",getuid());
syslog(LOG_DEBUG|LOG_LOCAL0,"Debug",getuid());
closelog();
}
Run Code Online (Sandbox Code Playgroud) 我试图在OOP中为VBO编写一个包装器,它包含addVertex,addNormal .. addX,flush()和render()函数.首先,我在不同的向量中保存顶点,法线,索引,如:
std::vector<glm::vec4> vertexBuffer;
std::vector<glm::vec4> colorBuffer;
std::vector<glm::vec3> normalBuffer;
std::vector<glm::vec2> texCoordBuffer;
std::vector<unsigned int> indexBuffer;
Run Code Online (Sandbox Code Playgroud)
但是当我在某处读到时,为每个人保存不同的VBO ID是完全没有效率的,因此最好按照VertexNormalTexCoordColor - VNTC - VNTC ...的顺序打包它们,并将它们表示在一个VBO ID中.因此,上传到GPU时可以有效地使用缓冲区.所以这次我仍然将它们保存在向量中但是当我调用flush()时我想用结构包装它们,然后将该结构向量上传到GPU:
struct VBOData {
glm::vec4 vert;
glm::vec3 normal;
glm::vec4 color;
glm::vec2 texcoord;
};
std::vector<VBOData> vboBuffer;
Run Code Online (Sandbox Code Playgroud)
然后我上传flush()中的所有内容:
vboBuffer.reserve(vertexBuffer.size());
for (int i = 0; i < vertexBuffer.size(); ++i) {
VBOData data;
data.vert = vertexBuffer[i];
data.color = colorBuffer[i];
data.normal = normalBuffer[i];
data.texcoord = texCoordBuffer[i];
vboBuffer.push_back(data);
}
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vboBuffer.size() * sizeof(VBOData), (GLchar*) &vboBuffer[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
现在有这个问题,如果我的对象不包含颜色,法线或tex坐标并且只包含顶点怎么办?或者只关于顶点和法线?或者总是有顶点的不同数据组合?为了提高效率,我能否以V(N)(T)(C)顺序动态打包它们?
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
Run Code Online (Sandbox Code Playgroud)
我已经知道第一行是用于类型检查,但对于第二行,
为什么要进行(char *)转换?我找不到解释这个.
我自己做了一些实验代码,即使没有演员,结果似乎也很好.
是否有STL算法或快速技术来测试数组的所有成员是否设置为相同的值?
例如,我有一个默认值的数组:
bool *finishFlags =new (std::nothrow) bool[numOfBools];
//Init all to false:
for(int i = 0 ; i < numOfBools; ++i){
*finishFlags++ = false;
}
Run Code Online (Sandbox Code Playgroud)
现在,在运行时期间,一些数组成员被设置为true,我想测试它们是否都设置为相同的值(在这种情况下为true).是否有一种快速的方法可以在没有典型的数组迭代的情况下完成它?
struct A
{
int f()
{} // Notice here!
};
int main()
{
A a;
a = a;
}
Run Code Online (Sandbox Code Playgroud)
我的编译器是最新的VC++编译器(Visual Studio 2013 Preview)
函数A :: f不返回任何值; 但没有编译器警告或错误!为什么?