小编Mat*_*lin的帖子

C++:何时(以及如何)调用C++全局静态构造函数?

我正在研究一些C++代码,我遇到了一个问题,这个问题一直在唠叨我...假设我正在Linux主机上用GCC编译ELF目标,那里是全局静态构造函数和析构函数叫什么名字?

我听说crtbegin.o中有一个函数_init,crtend.o中有函数_fini.这些是由crt0.o调用的吗?或者动态链接器是否实际检测到它们在加载的二进制文件中的存在并调用它们 如果是这样,它实际上给他们打电话?

我主要感兴趣的是,因为我的代码被加载,执行,然后在运行时卸载,所以我可以理解幕后发生的事情.

提前致谢!

更新:我基本上试图找出构造函数被调用的一般时间.我不想根据这些信息在我的代码中做出假设,或多或少地更好地了解我的程序加载时在较低级别发生的事情.我知道这是特定于操作系统的,但我试图在这个问题上稍微缩小一点.

c++ static gcc constructor global

24
推荐指数
5
解决办法
2万
查看次数

POSIX进程组

我目前正在将进程组实现到我的操作系统项目的POSIX子系统中.但是,我对POSIX规范(setsid)(以及维基百科的进程组页面)感到有些困惑.

我们的终端层将SIGINT发送到前台进程(组,其id应该等于组长的PID).在这种情况下,该前台进程(我们的"登录"应用程序)通过调用成为组长setsid.当用户登录时,程序会分叉并执行用户的shell.在这个阶段,我的理解是我setpgid在打电话之前给分叉的孩子打电话exec*.这意味着执行的程序从一开始就是过程组的一部分.

如果我想在进程组之外运行新分叉的子进程,我只能setsid在调用之前调用分叉的子进程exec*.

它是否正确?我应该检查或做的是否有任何非常模糊的东西?

作为一个后续问题,我相信我已经知道,是否需要fork转移团体会员资格?或者是setpgid每次fork通话后必须使用的东西?我收集的进程组是fork从POSIX定义转移的fork.

提前致谢.

c posix process

12
推荐指数
1
解决办法
4504
查看次数

Python:将unicode字符串传递给C++模块

我正在使用现有模块,提供C++接口并使用字符串进行一些操作.

我需要使用Unicode字符串,遗憾的是模块没有任何Unicode接口支持,所以我写了一个额外的函数来添加到接口:

void SomeUnicodeFunction(const wchar_t* string)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在Python中使用以下代码时:

SomeModule.SomeUnicodeFunction(ctypes.c_wchar_p(unicode_string))
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ArgumentError: Python argument types in
    SomeModule.SomeUnicodeFunction(SomeModule, c_wchar_p)
did not match C++ signature:
    SomeUnicodeFunction(... {lvalue}, wchar_t const*)
Run Code Online (Sandbox Code Playgroud)

(名称已更改).

我已经尝试将C++模块中的wchar_t更改为Py_UNICODE但没有成功.我该如何解决这个问题?

c++ python unicode module

6
推荐指数
1
解决办法
3599
查看次数

实际上,通常使用什么pthreads功能?

我正在研究我的操作系统项目的POSIX子系统,我已经达到了我想要在pthreads支持上工作的地步.但是,我不确定我应该在多大程度上实施它们.

什么是最常用的pthreads功能?有什么东西我现在可以安全地"存根"并在我们移植需要它的应用程序时实现它吗?到目前为止,我的研究指出了基本的线程操作(创建,连接等等) - 这是非常明显的 - 以及互斥支持.实际上,应用程序使用的远不止这些吗?

我想我只是想弄清楚,在仍然有一个有效的实现的情况下我可以逃脱多少.

posix pthreads

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

C++是否展示了它的时代,因为程序员试图以从未设计过的方式使用它?

背景

使用boost和其他类似的库是找到编译器缺点的最简单的方法,但是有一个阶段,事情走得太远了吗?

这个错位的符号:

_ZTSN5boost6spirit2qi6detail13parser_binderINS1_11alternativeINS_6fusion4consINS1_8sequenceINS6_INS1_16lexeme_directiveINS7_INS6_INS1_6actionINS1_9referenceIKNS1_4ruleIN9__gnu_cxx17__normal_iteratorIPKcSsEEFN7xxxxxxx2ir8carry_op2OpEvENS5_11unused_typeESM_EEEENS_7phoenix5actorINSQ_9compositeINSQ_11assign_evalENS5_6vectorINS0_14local_variableILi0EEENS0_8argumentILi0EEENS5_5void_ESZ_SZ_SZ_SZ_SZ_SZ_SZ_EEEEEEEENS6_INS1_10char_classINS0_3tag9char_codeINS15_5spaceENS0_13char_encoding5asciiEEEEENS5_3nilEEEEEEEEENS6_INS9_INS7_INS6_INSA_IKNSB_ISG_FSbIwSt11char_traitsIwESaIwEEvENSH_6parser11white_spaceISG_EESM_EEEENS6_INS1_12literal_charINS18_8standardELb1ELb0EEENS6_IS1R_NS6_IS1U_NS6_IS1R_NS6_IS1U_NS6_IS1R_NS6_IS1U_NS6_IS1R_S1C_EEEEEEEEEEEEEEEEEEEENSR_INSS_IST_NSU_INS0_9attributeILi0EEENSS_INSQ_6detail14construct_evalISJ_EENSU_ISW_SY_NSX_ILi1EEENSX_ILi2EEENSX_ILi3EEENSX_ILi4EEESZ_SZ_SZ_SZ_EEEESZ_SZ_SZ_SZ_SZ_SZ_SZ_SZ_EEEEEEEES1C_EEEEEENS6_INS7_INS6_IS1G_NS6_INS9_INS7_INS6_IS1R_NS6_IS1U_NS6_IS1R_NS6_IS1U_NS6_IS1R_NS6_IS1U_NS6_IS1U_S1W_EEEEEEEEEEEEEEEENSR_INSS_IST_NSU_IS26_NSS_IS29_NSU_ISW_SY_S2A_S2B_NSQ_5valueINS_8optionalIS1K_EEEES2C_SZ_SZ_SZ_SZ_EEEESZ_SZ_SZ_SZ_SZ_SZ_SZ_SZ_EEEEEEEES1C_EEEEEENS6_INS7_INS6_IS1G_NS6_INS9_INS7_IS21_EENSR_INSS_IST_NSU_IS26_NSS_IS29_NSU_ISW_SY_S2A_S2B_S2C_S2Y_SZ_SZ_SZ_SZ_EEEESZ_SZ_SZ_SZ_SZ_SZ_SZ_SZ_EEEEEEEES1C_EEEEEES1C_EEEEEEEEN4mpl_5bool_ILb0EEEEE
Run Code Online (Sandbox Code Playgroud)

(1,388个字符)

翻译成(感谢c ++ filt!):

boost::spirit::qi::detail::parser_binder<boost::spirit::qi::alternative<boost::fusion::cons<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::lexeme_directive<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::reference<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, xxxxxxx::ir::carry_op::Op ()(), boost::fusion::unused_type, boost::fusion::unused_type> const>, boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::assign_eval, boost::fusion::vector<boost::spirit::local_variable<0>, boost::spirit::argument<0>, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > > >, boost::fusion::cons<boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, boost::fusion::nil> > > >, boost::fusion::cons<boost::spirit::qi::action<boost::spirit::qi::sequence<boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > ()(), xxxxxxx::parser::white_space<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, boost::fusion::unused_type> const>, boost::fusion::cons<boost::spirit::qi::literal_char<boost::spirit::char_encoding::standard, true, false>, boost::fusion::cons<boost::spirit::qi::reference<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > ()(), …
Run Code Online (Sandbox Code Playgroud)

c++

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

Code Golf:解决迷宫问题

这是一个有趣的问题,需要用最少量的代码来解决.我希望递归解决方案最受欢迎.

我们有一个被定义为人物地图的迷宫,其中=是墙,空间是路径,+是你的起点,#是你的终点.一个非常简单的例子是这样的:

====
+  =
= ==
=  #
====
Run Code Online (Sandbox Code Playgroud)

您能编写一个程序,以尽可能少的代码找到以这种方式解决迷宫的最短路径吗?

如果它适用于所有迷宫输入,例如那些路径跨越自身或具有大量分支的迷宫点,则奖励积分.该程序应该能够适用于大型迷宫(例如,1024x1024 - 1 MB),以及如何将迷宫传递给程序并不重要.

"玩家"可以沿对角线移动.输入迷宫将永远不会有对角线通道,因此您的基本动作组将是向上,向下,向左,向右.对角线移动只是向前看一点,以确定是否可以合并上/下和左/右.

输出必须是迷宫本身,使用星号字符(*)突出显示最短路径.

maze code-golf

4
推荐指数
3
解决办法
3164
查看次数

POSIX线程:条件变量 - 重点是什么?

我最近一直在和pthreads合作,而且还有一件小事我还是不太了解.我知道条件变量旨在等待特定条件成立(或"发信号").我的问题是,这与普通的互斥体有何不同?

根据我的理解,当条件变为真时,条件变量不仅仅是具有额外逻辑的互斥锁来解锁另一个互斥锁(并再次锁定它)?

Psuedocode示例:

mutex mymutex;
condvar mycond;
int somevalue = 0;

onethread()
{
    lock(mymutex);

    while(somevalue == 0)
        cond_wait(mycond, mymutex);

    if(somevalue == 0xdeadbeef)
        some_func()

    unlock(mymutex);
}

otherthread()
{
    lock(mymutex);

    somevalue = 0xdeadbeef;

    cond_signal(mycond);

    unlock(mymutex);
}
Run Code Online (Sandbox Code Playgroud)

因此,此示例中的cond_wait解锁mymutex,然后等待mycond发出信号.

如果是这样,那么条件变量不仅仅是具有额外魔力的互斥量吗?或者我对互斥和条件变量的基本基础有误解?

pthreads condition-variable

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

Google Sidebar等应用程序如何减少桌面大小?

我正在尝试编写一个应用程序,它将位于每个窗口顶部的桌面顶部.我需要这个窗口,然而,只是坐在在其他窗口的顶部,但实际上降低了桌面的大小,所以当这些窗口最大化他们不要被我的应用程序的酒吧掩盖.

所以,基本上,我希望我的应用程序的窗口行为与Windows任务栏的行为相匹配.那可能吗?

c++ windows

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

将纬度和经度转换为世界坐标的算法(OpenGL)

我有一组经度和经度坐标,这些坐标将在我正在研究的GL程序中呈现.我有每个纬度和经度的单位数量的信息(我有十进制度的坐标,例如27.1234) - 例如,每经度15个单位,每个纬度10个单位.但是,我在渲染方面遇到了问题.

这个计算给了我可以用于渲染的位置,但它并不完美.我最初只使用S026.33.01.806 E148.46.27.009等坐标进行测试,当我切换到N039.52.19.030 W075.14.28.107等坐标时,渲染最终呈现倒置和水平翻转.

可能是对OpenGL的基本缺乏理解以及它如何解释坐标,或者我可能以错误的方式处理问题.我正在使用Python和PyOpenGL,但我认为这个算法可以在没有特定语言要求的情况下完成.

编辑:我上传了与http://slexy.org/view/s21LKiD9tj最相关的代码.

opengl algorithm latitude-longitude

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

PHP:正则表达式从字符串中获取URL

可能重复:
识别字符串中是否存在URL
Php解析链接/电子邮件

我正在研究一些PHP代码,它从各种来源获取输入,需要找到URL并将它们保存在某个地方.需要处理的输入类型如下:

http://www.youtube.com/watch?v=IY2j_GPIqRA
Try google: http://google.com! (note exclamation mark is not part of the URL)
Is http://somesite.com/ down for anyone else?
Run Code Online (Sandbox Code Playgroud)

输出:

http://www.youtube.com/watch?v=IY2j_GPIqRA
http://google.com
http://somesite.com/
Run Code Online (Sandbox Code Playgroud)

我已经从互联网借用了一个正则表达式,但不幸的是擦掉了查询字符串 - 不好!

任何帮助组合正则表达式,或者可能是这个问题的另一种解决方案,将不胜感激.

php regex url

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