小编Sta*_*ked的帖子

前置命令,stdout和stderr

我有以下代码,它读取许多命令,打印它们并打印它们的输出.

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:'前缀.另外我想打印每个命令行的退出代码.

我怎样才能做到这一点?

bash shell

4
推荐指数
1
解决办法
1106
查看次数

分配给选定数量的客户时的GPL限制?

我有一个小型桌面应用程序依赖于VLC,这是一个根据GPL许可的应用程序.它不与任何VLC库链接,但它创建了一个VLC子进程并通过stdin和stdout流进行通信.我的申请将被许多客户使用.它不会是一个公开可用的工具.

在这种情况下,GPL要求我做什么?我是否只为这些客户提供开源代码?或者我是否需要向全世界公开发布?

编辑
有人提到如果我只是调用GPL可执行文件而没有实际链接GPL代码我就没事了.但是,在看到这些消息后,我不太确定:

我会接受可以为我澄清这个问题的答案.

gpl

3
推荐指数
1
解决办法
683
查看次数

如何实现一个小型的 RTSP 服务器?

我正在实现一个客户端/服务器应用程序,其中视频流发生在两台计算机之间(一个方向)。我想让服务器在开始流式传输时发布一个 SDP 文件。然后客户端将能够下载此 SDP 文件并使用它来获取流。为了实现这一点,我似乎需要在我的服务器应用程序中包含一个 RTSP 服务器。

我计划为客户端使用 libVLC 或 GS​​treamer。两者都能够使用来自 SDP 文件的信息获取传入的视频流。

服务器端我真的不知道从哪里开始。谁能推荐一个好的 C++ 库,它可以让我创建一个小型的 RTSP 服务器?

c++ rtsp

3
推荐指数
1
解决办法
1万
查看次数

包括一个声明一个名为"new"的变量的C头?

我正在尝试在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代码(修改库标题会让我感到紧张)所以我决定只创建一个最小的隔离层.

c++ openca

3
推荐指数
1
解决办法
185
查看次数

SVNKit:如何从工作目录中获取修订号

我想实现一个方法,可以从已检出SVN存储库的路径获取svn修订号.方法声明看起来像这样:

long getRevisionNumber(String localPath) { ... }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用SVNKit,但它似乎需要一个SVN URL开头.有没有办法从本地路径开始?

svnkit

3
推荐指数
1
解决办法
2842
查看次数

`std :: string(strerror(errno))`危险吗?

在我的代码中的某些地方,我打印这样的调试消息:

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并不完全清楚(这会导致我的代码崩溃).有谁知道它是否安全?

c c++

3
推荐指数
2
解决办法
2311
查看次数

在Clojure中使用C风格的封装技术?

我正在研究我的第一个(非平凡的)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.

clojure

3
推荐指数
1
解决办法
370
查看次数

使用联合对IP地址进行多种解释?

在工作中,我们具有以下构造,可以将IP地址解释为4个字节的数组或32位整数:

union IPv4
{
    std::uint32_t ip;
    std::uint8_t  data[4];
};
Run Code Online (Sandbox Code Playgroud)

这很好用,但是在阅读了本书C ++编码标准的第97章“不要使用并集来重新解释表示形式”之后,我有点担心。本书中的示例更加阴险,我不确定它是否适用于我的代码。

我的代码是否存在任何潜在问题?

c++ unions

3
推荐指数
1
解决办法
728
查看次数

为什么WinAPI的GetSystemInfo告诉我的四核机器有8个内核?

我试图找出如何以编程方式获取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芯.

c++ winapi

3
推荐指数
1
解决办法
1798
查看次数

被命名的RVO的可笑性?

我有一个看起来像这样的函数:

// 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有多大可能性呢?

c++ return-value-optimization

3
推荐指数
1
解决办法
287
查看次数

标签 统计

c++ ×6

bash ×1

c ×1

clojure ×1

gpl ×1

openca ×1

return-value-optimization ×1

rtsp ×1

shell ×1

svnkit ×1

unions ×1

winapi ×1