jpeg文件的标准格式是文件内容的前两字节是0xFF和0xD8,而有的jpg后缀的文件内容前两个字节有可能为0x42和0x4D之类。
所以在用JpegLib库如jpegsr9c.zip读取jpg文件时,可能在jpeg_read_header处报错,或者程序退出,因为源码中遇到错误时就会调系统函数exit(1)。
因此,在调用Jpeg库之前,一定要检查jpg文件的头两个字节是否标准。
人,技术,生活。
jpeg文件的标准格式是文件内容的前两字节是0xFF和0xD8,而有的jpg后缀的文件内容前两个字节有可能为0x42和0x4D之类。
所以在用JpegLib库如jpegsr9c.zip读取jpg文件时,可能在jpeg_read_header处报错,或者程序退出,因为源码中遇到错误时就会调系统函数exit(1)。
因此,在调用Jpeg库之前,一定要检查jpg文件的头两个字节是否标准。
从http://ffbinaries.com/downloads下载ffserver到linux系统,
制作server.cfg文件如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | RTSPPort 5454 BindAddress 0.0.0.0 RTSPBindAddress 0.0.0.0 MaxHTTPConnections 2000 MaxClients 1000 MaxBandwidth 30000 CustomLog - NoDaemon #NoDefaults <Stream test.mp4> File "/home/sdb/work/stream/test.mp4" Format rtp </Stream> |
命令行运行
1 | ./ffserver -f server.cfg |
这样,任何地方,只要能连接到此linux系统,其IP地址为192.168.1.32,都可以播放
1 | rtsp://192.168.1.32:5454/test.mp4 |
由于局域网限MAC地址,VmWare虚拟机不能直接连接物理网络,只能NAT模式,那么怎么让别人的电脑连接到本机虚拟机里的服务程序呢?
比如虚拟机里的服务程序IP为192.168.38.132,端口为5454,
本机IP为192.168.1.67,现在我们做一个代理,让别人能访问到192.168.38.132:5454。
在本机,以管理员模式运行cmd,输入
1 2 3 4 5 | netsh interface portproxy add v4tov4 listenaddress=192.168.1.67 listenport=5454 connectaddress=192.168.38.132 connectport=5454 |
记住,再禁掉本机防火墙!
此时,别人的电脑就可以访问此虚拟机里的服务程序了。
当不再需要此代理时,在本机,以管理员模式运行cmd,输入
1 2 3 4 5 | netsh interface portproxy delete v4tov4 listenaddress=192.168.1.67 listenport=5454 |
注意:微软的netsh只能转发tcp包,没有实现转发udp包。
关闭80端口
1 | iptables -A INPUT -ptcp --dport 80 -j DROP |
而开启80端口要看情况,不能简单的一句
1 | iptables -A INPUT -ptcp --dport 80 -j ACCEPT |
因为其中的-A表示append一条规则到规则链上,之前存在一条DROP链,其后再加一条ACCEPT链,80端口还是会被禁掉。
先用如下命令看一下规则链
1 | iptables -L |
把DROP那一链删掉
1 2 | iptables -D INPUT -ptcp --dport 80 -j ACCEPT iptables -D INPUT -ptcp --dport 80 -j DROP |
如果默认是所有端口都禁用,那就在空链里加一条ACCEPT链。
最后保存
1 | iptables-save |
编译期算结果C98示例:
1 2 3 4 5 6 7 | template <int n> struct fact98 { static const int value = n * fact98<n - 1>::value; }; template <> struct fact98<0> { static const int value = 1; }; std::cout << fact98<5>::value << std::endl; |
或C11的示例:
1 2 3 | constexpr int fact11(int n) { return n <= 1 ? 1 : (n * fact11(n - 1)); } |
C11中不能使用变量和循环,C14中可以:
1 2 3 4 5 | constexpr int fact14(int n) { int s = 1; for (int i = 1; i <= n; i++) { s = s * i; } return s; } |
编译期检查1:
1 2 3 4 5 6 7 | static_assert(sizeof(void *) == 8, "expected 64-bit platform"); template<typename T, int Row, int Column> struct Matrix { static_assert(Row >= 0, "Row number must be positive."); static_assert(Column >= 0, "Column number must be positive."); }; |
编译期检查2:
1 2 3 4 5 6 7 8 9 | struct A { void foo(){} int member; }; template<typename Function> std::enable_if_t<!std::is_member_function_pointer_v<Function>> foo(Function&& f) { } foo([] {}); //ok foo(&A::foo); //compile error: no matching function for call to 'foo(void (A::*)())' |
编译期检查3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | template< class, class = void > struct has_foo : std::false_type {}; template< class T > struct has_foo< T, std::void_t<decltype(std::declval<T>().foo())> > : std::true_type {}; template< class, class = void > struct has_member : std::false_type {}; template< class T > struct has_member< T, std::void_t<decltype(std::declval<T>().member)> > : std::true_type {}; struct A { void foo(){} int member; }; static_assert(has_foo< A >::value); static_assert(has_member< A >::value); |
任务栏属性-〉通知区域-〉自定义,找到Expert/Euhat Work Trace图标,行为下拉框中选择“显示图标和通知”,确定保存,这样任务栏里WorkTrace图标就又显示出来了。
还有一种情况,当explorer.exe进程重启后,Euhat Work Trace或Euhat Expert通知区域的小图标也会消失,这时,要么双击程序exe,要么退出程序再启动。
本软件可以记录电脑操作时间,结合工作时间安排,可以提醒用户上下班打卡,比如钉钉打卡。
原因是对于没有处理的消息,没有调用DefWindowProc并返回其返回值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | int pathGetContainer(const char *path, string &dir) { const char *p; for (p = path + strlen(path); p >= path; p--) { if (*p == '/' || *p == '\\') break; } dir = string(path).substr(0, p - path + 1); return 1; } ... char curPath[1024]; GetModuleFileNameA(AfxGetApp()->m_hInstance, curPath, sizeof(curPath)); string curDir; pathGetContainer(curPath, curDir); SetCurrentDirectoryA(curDir.c_str()); ... |
注:此方法对于Windows shell编程不适用,因为是运行在资源管理器进程里的插件,返回的都是explorer.exe所在路径,此种情况下,一般是通过注册表里写死的配置获取进程路径。
查了很多网页,有的说是要删除的文件存在打开的句柄未关掉。而我这种情况是在程序一开始DeleteFile删除某个文件就删不掉,报ERROR_ACCESS_DENIED的错,换成_unlink删也删不掉。
但我在同样的目录新建一个文本文件再DeleteFile此文本文件是可以删除的。
于是我怀疑是不是有钩子进程使坏,我将“QQ电脑管家”程序退出,结果就可以成功调用DeleteFile了。
也就是说,“QQ电脑管家”阻止了DeleteFile删除某些特定后缀的文件,比如jpg后缀的文件。