小编Wes*_*ler的帖子

C++ read() - 从套接字到ofstream

是否有一种C/C++方法使用read()从套接字读取数据并使接收缓冲区是文件(ofstream)或类似的自扩展对象(例如)?

编辑: 当我考虑如何读取可能接收10000+字节文件的内容的流套接字时出现了问题.我从来没有像把20000或50000字节(现在足够大)放在堆栈上作为缓冲区,文件可以临时存储,直到我可以插入文件.为什么不直接将其直接流入文件中以加注星标.

就像你可以在std:string里面的char*那样,我想到了类似的东西

read( int fd, outFile.front(), std::npos );  // npos = INT_MAX
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

结束编辑

谢谢.

c c++ sockets

5
推荐指数
1
解决办法
1538
查看次数

为什么在正则表达式中将单个字符括在括号中时,在greting ps时会将grep本身排除在外?

如果我在Linux机器上执行以下grep:

$ ps -ef | grep bash
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 pts/1    00:00:00 bash
wmiller  10795  6429  0 Jun07 pts/2    00:00:00 bash
wmiller  16220  6436  0 06:55 pts/0    00:00:00 grep --color=auto bash
Run Code Online (Sandbox Code Playgroud)

注意最后一行是报告grep本身,因为单词"bash"在args中为grep.

但是,如果相反我把[]放在"bash"中的任何字母周围,我得到:

$ ps -ef | grep ba[s]h
root      2286     1  0 Jun06 ?        00:03:15 /bin/bash /etc/init.d/zxy100wd
wmiller   6436  6429  0 Jun06 pts/0    00:00:01 bash
wmiller  10707  6429  0 Jun07 …
Run Code Online (Sandbox Code Playgroud)

regex grep

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

选择 QuickFix 窗口中的项目后,如何关闭该窗口?

我的vim得到了很棒的bookmarks.vim插件。我特别喜欢命名书签并使用 QuickFix 窗口列出它们。

在显示书签列表的代码中,我想添加一些内容,以便在我选择一个选项后关闭 QuickFix 窗口。我怎么做?

" Open all bookmarks in the quickfix window
command! CopenBookmarks call s:CopenBookmarks()
function! s:CopenBookmarks()
let choices = []

for [name, place] in items(g:BOOKMARKS)
let [filename, cursor] = place

call add(choices, {
\ 'text': name,
\ 'filename': filename,
\ 'lnum': cursor[1],
\ 'col': cursor[2]
\ })
endfor

call setqflist(choices)
copen
endfunction
Run Code Online (Sandbox Code Playgroud)

vim vim-plugin

4
推荐指数
2
解决办法
1601
查看次数

调用者程序对库类成员错误的未定义引用

其他问题在下面添加,2011年4月11日

我正在用C++开发一个跨平台的共享库DLL/Sos和测试程序集,虽然我必须能够支持C.这些库将仅作为目标代码发布,但测试程序将附带源代码我们的客户可以拥有示例代码.出于这个原因,我正在设计要在运行时加载的库,即使用dlopen()/ LoadLibraryA()进行动态链接.

我在Umbutu 10.04上使用g ++ 4.4.3-4,在Vista/64上使用VC++ 2008(在32位模式下).

一切似乎在Windows上运行得很好(现在).但是,当我在Linux上编译时,我遇到了一些我无法弄清楚的错误.

测试器和库有几个类,分别用.cpp和.h编写.除主入口点之外,库中的类和大多数内容都在命名空间DISCOVER_NS中.

以下是该项目的简要草图:

首先,承认,我缩短了一堆名称,因此代码更具可读性.

discover.cpp

  • 使用指向它的指针创建一个类对象,该对象名为DiscoverObject类型的MainObject.

  • 有一个extern"C"函数,它将theMainObject作为void*返回给调用者程序.

  • DiscoverObject有几个方法,并实例化在单独的cpp和.h中找到的其他类.一个特殊的方法名为Hello(),它可以满足您的期望,它会打印一个"hello"测试消息.


tester.cpp

  • 获取库的句柄

  • 获取返回theMainObject的函数的函数指针.

  • 执行函数(指针)并将返回的地址从void*转换为DISCOVER_NS :: DiscoverObject*aDiscoverObject.

  • 运行aDiscoverObject-> Hello().


我编译:

CC = @ g ++

gflags = -g3

cflags = -fPIC -Wall -pedantic

lib_linkflags:= -shared -fPIC -lstdc ++ -lrt -lpthread -rdynamic

tester_linkflags:= -ldl -lpthread

define = -D_ linux _ -D_DEBUG -D_IPC_ARCH_INTEL = 1 -D_THREAD_SAFE


现在,当我编译时,我得到以下错误:*Tester.cpp:142:未定义引用`Discover_NS :: DiscoverObject :: hello()'*

我还从discover.so中得到了一堆其他未定义的引用错误,例如:*discover.so:未定义引用`Discover_NS :: DeviceList :: ~DeviceList()*


我尝试在SO外部"C"中制作几乎所有东西.没有不同.

我尝试将语句放入discover.cpp,如下所示:extern void Discover_NS :: OtherClass :: method(args); 但这给了我关于"课外声明不是定义"错误的错误.


我知道这会有助于查看代码,但我需要时间来发布一些小的帖子.

谁能提出解决这个烂摊子的想法? …

c++ cross-platform shared-libraries undefined-reference

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

当我尝试调试时,Visual Studio 2008说"指定的文件是一个无法识别或不支持的二进制格式"

我有一个包含两个C++项目的VS2008解决方案.一个是Win32/console .dll,另一个是测试dll的测试程序,也是Win32控制台应用程序.

当我构建解决方案时,即使使用干净的构建并将Debug Command设置为可执行文件的硬编码路径,尝试调试时会显示一个消息框,

"指定的文件是无法识别或不支持的二进制格式".

它试图执行的程序是tester.cpp的源代码.

有人可以建议治愈吗?我可以提供哪些信息来帮助解决此问题?

c++ visual-studio-2008

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

AppleScript将剪贴板中的文本粘贴到文件中

我觉得这很容易.谷歌让我想到了.

我想要的是一个穷人的操作系统间剪贴板.我在网上看到的一切都不是免费的,没有应用程序这个简单应该花费任何人任何东西,或与本地Linux安装或Windows或其他一些不兼容.

在最佳解决方案中,右键鼠标操作将添加到"剪切","复制"和"粘贴",其名称类似于"复制到文件".该文件可能存在也可能不存在,但具有固定名称并位于共享磁盘上.

我想我需要第二个鼠标右键动作"从文件粘贴"以补充"复制到文件".

那么,有人会告诉我如何使用AppleScript或者Automator,获取剪贴板的当前文本内容并粘贴到现有文件中,覆盖文件的任何现有内容吗?

OS/X Snow Leopard

谢谢.

macos applescript automator

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

在 XML/DTD 中指定多字枚举值

当为 DTD 属性定义指定枚举值列表时,是否可以使用多字值?

      <!ATTLIST SystemName Case ("MIXED RESPECT"|"MIXED IGNORE"|"LOWER RESPECT"|"LOWER IGNORE"|"UPPER RESPECT"|"UPPER IGNORE") "MIXED IGNORE">
Run Code Online (Sandbox Code Playgroud)

我尝试将值放在引号中(如图所示),而不是放在引号中。我一直在阅读有关符号和 nmtokens 的内容,但我看到的每一个地方似乎都在说“请参阅废话规范”,但没有一个例子。示例价值约一百万页规格。

xml dtd

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

区分C++静态方法是由类还是由对象调用

有没有办法判断类的静态方法是通过调用类方法还是通过来自对象的调用来调用的?

class mertz
{
   static int x(void) {....}
   ....
}

int main( ... )
{
   int c = mertz::x();
   mertz     fred;  
   ind d = fred.x();
}
Run Code Online (Sandbox Code Playgroud)

x可以告诉c和d的调用区别吗?

谢谢.

c++ static class function

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

C++访问类的成员,该类是std :: map中的mapped_type

考虑一下std::map<const char *, MyClass*>.

如何访问MyClass地图指向的对象的成员(变量或函数)?

// assume MyClass has a string var 'fred' and a method 'ethel'
std::map<const char*, MyClass*> MyMap;

MyMap[ "A" ] = new MyClass;
MyMap.find( "A" )->fred = "I'm a Mertz";  // <--- fails on compile
MyMap.find( "A" )->second->fred = "I'm a Mertz";  // <--- also fails
Run Code Online (Sandbox Code Playgroud)

编辑 - 根据Xeo的建议

我发布了虚拟代码.这是真正的代码.

// VarInfo is meta-data describing various variables, type, case, etc.
std::map<std::string,VarInfo*> g_VarMap; // this is a global 

int main( void )
{ …
Run Code Online (Sandbox Code Playgroud)

c++ stdmap

2
推荐指数
1
解决办法
5322
查看次数

如何使用“ls”获取目录条目的日期而不是整个目录内容的日期?

我似乎想要与其他人相反 - 我如何使用(在 bash 脚本中) anls -al /some/path/to/where/ever/. 来仅获取“.”的条目,而不是“.”中的所有内容?我要找的是导演的日期,所以。换句话说, /some/path/to/where/ever/.目录上的日期是什么?

不一定是“ls”,这看起来很自然。

bash ls

2
推荐指数
1
解决办法
3359
查看次数