我有以下代码,它读取许多命令,打印它们并打印它们的输出.
while read line ; do
echo "C:$line"
echo "O:$(${line} 2>&1 | perl -pe 's,\n,\\n,'g)\n"
done << EOF
g++-4.8 -O2 -Wall -Wextra -pedantic -pthread main.cpp
./a.out
EOF
Run Code Online (Sandbox Code Playgroud)
输出:
C:g++-4.8 -O2 -Wall -Wextra -pedantic -pthread main.cpp
O:main.cpp: In function ‘int main(int, char**)’:\nmain.cpp:3:9: warning: unused variable ‘unused’ [-Wunused-variable]\n int unused;\n ^\n\n
C:./a.out
O:*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x00007fff3bd01a5c ***\n======= Backtrace: =========\n/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f6960e1ab96]\n./a.out[0x400502]\n/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f6960dbd76d]\n./a.out[0x400535]\n======= Memory map: ========\n\n
Run Code Online (Sandbox Code Playgroud)
我想区分stdout和stderr并使用stderr的'E:'前缀.另外我想打印每个命令行的退出代码.
我怎样才能做到这一点?
我有一个小型桌面应用程序依赖于VLC,这是一个根据GPL许可的应用程序.它不与任何VLC库链接,但它创建了一个VLC子进程并通过stdin和stdout流进行通信.我的申请将被许多客户使用.它不会是一个公开可用的工具.
在这种情况下,GPL要求我做什么?我是否只为这些客户提供开源代码?或者我是否需要向全世界公开发布?
编辑
有人提到如果我只是调用GPL可执行文件而没有实际链接GPL代码我就没事了.但是,在看到这些消息后,我不太确定:
我会接受可以为我澄清这个问题的答案.
我正在实现一个客户端/服务器应用程序,其中视频流发生在两台计算机之间(一个方向)。我想让服务器在开始流式传输时发布一个 SDP 文件。然后客户端将能够下载此 SDP 文件并使用它来获取流。为了实现这一点,我似乎需要在我的服务器应用程序中包含一个 RTSP 服务器。
我计划为客户端使用 libVLC 或 GStreamer。两者都能够使用来自 SDP 文件的信息获取传入的视频流。
服务器端我真的不知道从哪里开始。谁能推荐一个好的 C++ 库,它可以让我创建一个小型的 RTSP 服务器?
我正在尝试在C++应用程序中使用OpenCA(libPKI)库.但是,当包含文件pki_x509_data_st.h时,会遇到以下代码片段:
typedef struct pki_x509_callbacks_st {
/* ---------------- Memory Management -------------------- */
void * (*new) (void );
void (*free) (void *x );
void * (*dup) (void *x );
Run Code Online (Sandbox Code Playgroud)
由于"新"指针声明,这将无法编译.
我怎样才能使它工作?
更新
重命名"new"变量后,我遇到了一些新问题("在struct之后使用typedef name"等).我想避免改变过多的旧C代码(修改库标题会让我感到紧张)所以我决定只创建一个最小的隔离层.
我想实现一个方法,可以从已检出SVN存储库的路径获取svn修订号.方法声明看起来像这样:
long getRevisionNumber(String localPath) { ... }
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用SVNKit,但它似乎需要一个SVN URL开头.有没有办法从本地路径开始?
在我的代码中的某些地方,我打印这样的调试消息:
int ret = getLinkSpeed(device.getSysName(), linkSpeed);
if (ret < 0)
{
logDebug("Failed to obtain port speed for this device. Error: " + std::string(strerror(errno)));
}
Run Code Online (Sandbox Code Playgroud)
从文档中可以看出,在某些情况下strerror是否会返回0并不完全清楚(这会导致我的代码崩溃).有谁知道它是否安全?
我正在研究我的第一个(非平凡的)Clojure程序我对我如何全局声明所有可变状态感到不自在.例如:
(def next-blocks (atom []))
(def num-next-blocks 1)
(def is-game-over (atom false))
(def user-name (atom (str)))
(def hs-xml (atom nil))
Run Code Online (Sandbox Code Playgroud)
由于我在工作中使用了很多C,因此我提出了使用常见的C风格封装技术的想法.它通常涉及struct对象,它作为第一个参数传递给对其进行操作的任何"成员函数".例如,见udev.
将此应用于Clojure将导致函数看起来像这样(未经测试):
(defstruct gamestate)
(defn game-new []
(struct-map gamestate
:level (atom 0)
:score (atom 0)
;etc...
))
(def game-get-score [game]
@(game :score))
(defn game-set-score [game new-score]
(reset! (game :score) new-score))
(defn game-get-level [game]
@(game :level))
(defn game-inc-level [game]
(swap! (game :level) inc))
; etc...
Run Code Online (Sandbox Code Playgroud)
我认为这肯定是我目前正在使用的全球定义的一个步骤.
这是推荐的方式吗?或者是否有更标准的Clojure方式?
我目前正在使用Clojure 1.1.0.
在工作中,我们具有以下构造,可以将IP地址解释为4个字节的数组或32位整数:
union IPv4
{
std::uint32_t ip;
std::uint8_t data[4];
};
Run Code Online (Sandbox Code Playgroud)
这很好用,但是在阅读了本书C ++编码标准的第97章“不要使用并集来重新解释表示形式”之后,我有点担心。本书中的示例更加阴险,我不确定它是否适用于我的代码。
我的代码是否存在任何潜在问题?
我试图找出如何以编程方式获取CPU内核的数量.这是我正在使用的代码:
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
std::cout << "CPU count: " << sysinfo.dwNumberOfProcessors << std::endl;
Run Code Online (Sandbox Code Playgroud)
这是通过Boot Camp在iMac i7上的Windows上运行的.很高兴发现Apple制造了一个制造错误并在我的机器上放了一个8芯而不是4芯.
我有一个看起来像这样的函数:
// Fetch 1 MB of data
void GetData(std::vector<char> & outData);
Run Code Online (Sandbox Code Playgroud)
1MB是夸大的,但我只是想说明最好避免不必要的副本.
如果我添加这个重载:
std::vector<char> GetData()
{
std::vector<char> result;
GetData(result);
return result;
}
Run Code Online (Sandbox Code Playgroud)
那么RVO有多大可能性呢?