小编Rob*_*ert的帖子

在Go中使用正则表达式拆分字符串

我是Go的新手,到目前为止一直很享受.我正在尝试找到一种使用正则表达式而不是字符串来拆分字符串的好方法.谢谢

http://nsf.github.com/go/strings.html?f:Split!

regex go string-split

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

OpenGL是否指定常量是任何特定值?

所以我一般都不会愚蠢地问这个问题,但这就是情况.我在编译器类中,现在我们已经为我们设计的语言编写了一个编译器,我们需要在其中编写一个非常重要的程序.我正在做一个OpenGL旋转立方体,以展示我正在研究的OpenGL绑定.

但是我遇到了一些问题.大多数情况下,我不能只是拉入OpenGL标头,并且在任何情况下我都不需要其中的所有内容,但这会阻止我使用任何有用的常量(GL_FLOAT,GL_COLOR_BUFFER_BIT等).

所以我想知道 - 从机器到机器,操作系统到操作系统的#define'd常数是一样的吗?换句话说,常量本身是GL标准的一部分,还是作为符号留下?

谢谢!

opengl

10
推荐指数
1
解决办法
927
查看次数

SCM选择新用户?

这里真的很容易.最好的理由获得胜利.

我是你所听说过的一所学校的计算机科学专业的学生,​​现在已经编程好几年了(大约8年),所以我写了几行代码.但是因为我从来没有真正分发过 - 源代码或二进制文件 - 也没有团队开发(虽然我确信我会这样做!),但我从来不需要学习源代码管理系统.我有一个非常无聊的文件夹层次结构src/project_name或者src/class_code/hw_or_project_name如果我需要将代码发送给朋友或进行评分,它只是一个tarball.

随着我的项目变得越来越大,近年来发生了一些变化.我的Mac,使用Time Machine,现在可以进行每小时备份 - 这几次为我节省了一些时间,最近我通过SSH进行了重大更改...然后几小时后在我的编辑器中保存并关闭了陈旧的副本.

但是,出于某种专业兴趣 - 以及它可能有用的压倒性感觉 - 我决定学习SCMS.现在,我有很多的经验,作为一个源代码"消费者" - ,git clone,svn checkout,,cvs co诸如此类的事情-但没有作为维护者,提交者,或更新.

我的问题是:我应该学什么?现在,你们中间有一群人在尖叫着"为什么一个人?你会用很多!" 但我想学习SCM的基础知识,并在最直接的系统中养成实际使用它的习惯.在我真正需要它之前,我有很多内容要做的概念 - 分支,标签,合并,协作等.

要清楚,我不是Linus Torvalds.我将维护一个,或者几个分支.在我的几十个文件中,我不介意某些操作在一个系统上比在其他系统上多花几百毫秒.

现在我有什么?我有一个虚拟主机.他们提供Subversion托管点击,或者我可以存储其他存储库没有问题.由于我无法解释的原因,我更倾向于Subversion.但这正是我不愿意跳进去的原因.我知道Mercurial,Git等等是热门的新事物,正在分发,但我不确定为什么这是一个好处.事实上,我不太确定它是如何起作用的.

那么,我该怎么做呢?颠覆还是Git?Mercurial还是CVS?Visual Source Safe还是Perforce?(最后一对是一个笑话)为什么一个在另一个?

谢谢你的时间,如果在错误的部分,我道歉.

编辑谢谢大家!感谢您的评论.考虑到Git和Hg之间的选择,我可能会选择Git - 任何分歧?二,为什么 Subversion?它似乎是旧的或其他过时的共识(不仅仅是在这里).为什么?

编辑2所以在阅读了所有的回复并做了一些阅读之后,我决定和Git一起去.如上所述,"答案"是最好的理由.Git似乎比Mercurial更受欢迎,即使它不那么干净.我正在将更改推送到我的网络服务器,我有viewgit已安装,而且工作得很好.在我的网络服务器上存储副本的动力是我想从我的几台机器上工作,我希望它们不同步.我还希望有几个工作副本彼此不同步和我的服务器,我现在明白Subversion在这方面相当薄弱.有很多我还在努力解决,但我现在已经设置好了,这样我就可以从http中拉出/克隆并推送ssh(下一步是设置Gitosis).对于想要做我正在做的事情的新手 - 你会发现你的"推送"命令将在第一次工作,但任何"克隆"的副本都不会跟踪你所做的改变.Git认为这是一个安全功能......我只是略微理解为什么,但它与合并有关.诀窍是使用 服务器上的更新后挂钩,用于将新推送的副本合并到服务器的工作副本中.

svn git cvs version-control mercurial

7
推荐指数
4
解决办法
880
查看次数

select()返回无效参数

我成功地从另一个线程的管道读取,并打印输出(在ncurses窗口中发生).

出于各种原因,我需要一次完成一个字符,并且我在FD上使用select()作为管道的读取端,以及一些其他FD(如stdin).

我的想法是,只有在即将准备好读取时才尝试从管道读取,而不是处理任何输入.这似乎有效 - 至少要开始.select()设置fd_set,如果FD_ISSET,我从FD执行1字节的read().但是select()说是一次太多了,而read()阻塞了.

所以我的问题是这个 - 为什么select()报告fd已准备好读取,如果后续的read()阻塞?

(大约)当管道的另一端连接到分叉进程时,同样的代码工作正常,如果这有帮助的话.

我可以根据要求发布代码,但它是标准的bog.设置一个fd_set,复制它,选择副本,如果FD被设置调用一个从同一个FD读取一个字节的函数...否则还原fd_set副本

编辑:根据要求,这是代码:

设置我的fd_set:

fd_set fds;
FD_ZERO(&fds); 
FD_SET(interp_output[0], &fds);
FD_SET(STDIN_FILENO, &fds);
struct timeval timeout, tvcopy; timeout.tv_sec=1;
int maxfd=interp_output[0]+1; //always >stdin+1
fd_set read_fds;
FD_COPY(&fds, &read_fds);
Run Code Online (Sandbox Code Playgroud)

在循环中:

if (select(maxfd, &read_fds, NULL, NULL, &timeout)==-1) {perror("couldn't select"); return;}
if (FD_ISSET(interp_output[0], &read_fds)) {
    handle_interp_out();
} else if (FD_ISSET(STDIN_FILENO, &read_fds)) {
//waddstr(cmdwin, "stdin!"); wrefresh(cmdwin);
    handle_input();
}

FDCOPY(&fds, &read_fds);
Run Code Online (Sandbox Code Playgroud)

handle_interp_out():

void handle_interp_out() {
    int ch;
    read(interp_output[0], &ch, 1);
    if (ch>0) {
            if (ch=='\n') { if (cmd_curline>=cmdheight) cmdscroll(); wmove(cmdwin, ++cmd_curline, …
Run Code Online (Sandbox Code Playgroud)

c unix select pipe

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

C++中地图的多个键

我有一个表格,其中的条目是这样的

Row - Column1 - Column2 - Column3 Column4

 1     0X0A      1          2      A
 2     0X0B      2          2      B
 3     0x0C      3          2      C
Run Code Online (Sandbox Code Playgroud)

现在我想使用map,以便我可以使用第1列或第2列作为获取行的键.我应该使用什么样的地图来实现这一目标?

(注 - 表只是为了解释而不是确切的要求)我想到使用multimap,但这不会解决问题

c++ stl map

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

从管道读到我的孩子过程

希望是一个简单的问题.我正在尝试同时学习fork(),pipe()和waitpid()并遇到一些问题.

if (pipe(myout)<0 || pipe(myin)<0 || pipe(myerr)<0) { perror("Couldn't make pipes"); return; }
int childpid=fork();
if (childpid==0) { //child
    fdopen(myout[1], "w");
    fdopen(myin[1], "r");
    fdopen(myerr[1], "w");
    dup2(myout[1],  1);
    dup2(myin[1], 0);
    dup2(myerr[1], 2);
    printf("This should be seen\n");
    fclose(stdout); fclose(stdin); fclose(stderr);
    sleep(10);
    _exit(0);
 } else { //parent, wait on child
    printf("parent, monitoring\n");
    sim_out=fdopen(myout[0], "r");
    sim_in=fdopen(myin[0], "w");
    sim_err=fdopen(myerr[0], "r");
    printf("have my fds\n");
    int status;
    do {
        int ch;
        if (read(myout[0], &ch, 1)>0)
            write(1, &ch, 1);
        else printf("no go\n");
            waitpid(childpid, &status, WNOHANG);
    } while (!WIFEXITED(status) …
Run Code Online (Sandbox Code Playgroud)

c unix fork pipe waitpid

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

pthread_exit(NULL)段错误

我有一个使用pthreads的项目; 主线程和子线程以及它们之间的管道.这一切都很好,除非有时它不起作用.子线程运行命令解释器,并且基于ncurses的GUI通过管道向其传送(一些)输入.

我正常创建线程(线程是pthread_t文件范围变量,interp_start是函数)

if (pthread_create(&thread, NULL, interp_start, NULL)) { perror("couldn't create thread"); return; }
Run Code Online (Sandbox Code Playgroud)

然后,如果解释器线程从用户收到"退出"命令,则调用interp_exit

fclose(output);
pthread_exit(NULL);
Run Code Online (Sandbox Code Playgroud)

主线程有一个select(),它检查输出的FD,并调用从FD读取()的函数:

int num=read(interp_output[0], &ch, 1);
if (num==0) shell_done();
if (num==-1) perror("read");
Run Code Online (Sandbox Code Playgroud)

通常可行的预期行为是关闭线程中的FILE*,这使得select()报告准备就绪,这使得read()发生,返回0,调用shell_done().经过一些简单而无关的清理后,这样做:

//fprintf(stderr, "joining thread\n");
pthread_join(thread, NULL);
//fprintf(stderr, "joined\n");
exit(EXIT_SUCCESS);
Run Code Online (Sandbox Code Playgroud)

所有这些有时是段错误.通常很好.如果我取消注释这两个printfs,如果它失败,我得不到(它在pthread_exit中的段错误)或者只是第一个(它在pthread_join中的段错误).

我不会在任何其他方面弄乱"线程",而我只处理空指针.这是怎么回事?我会在其他地方寻找,除非我在这两行之一一直遇到问题 - 甚至在restore_sem_to_pool.我认为它必须是我杀死线程的方式,但我正在做最简单的事情.

提前致谢...

c unix pthreads

0
推荐指数
1
解决办法
1463
查看次数

在VS2010中混淆std :: string :: c_str()行为

我确定我做错了什么,但对于我的生活,我无法弄清楚是什么!请考虑以下代码:

cerr<<el.getText()<<endl;
cerr<<el.getText().c_str()<<endl;
cerr<<"---"<<endl;
const char *value = el.getText().c_str();
cerr<<"\""<<value<<"\""<<endl;
field.cdata = el.getText().c_str();
cerr<<"\""<<field.cdata<<"\""<<endl;
Run Code Online (Sandbox Code Playgroud)

el是一个XML元素并getText返回一个std :: string.正如预期的那样,el.getText()el.getText().c_str()打印相同的值.但是,当它分配结果时,value设置为""- 即空字符串c_str().此代码已写入设置field.cdata=value,因此清除它.将其更改为所谓的相同表达式value后,它可以正常工作,最后一行打印出预期值.

因为el在堆栈中,我认为我可能已经破坏了它 - 但即使在value设置之后,基础值el仍然是正确的.

我的下一个想法是,有一些奇怪的编译器特定问题,将事物分配给const指针,所以我写了以下内容:

std::string thing = "test";
std::cout << thing << std::endl;
std::cout << thing.c_str() << std::endl;
const char* value = thing.c_str();
std::cout << value << std::endl;
Run Code Online (Sandbox Code Playgroud)

正如所料,我进行了三次"测试".

所以现在我不知道发生了什么.很明显,我的程序中有一些奇怪的事情在样本中没有发生,但我不知道它是什么,我不知道如何继续寻找.有人可以启发我,或者至少指出我正确的方向吗?

c++ stl const stdstring visual-studio-2010

0
推荐指数
1
解决办法
848
查看次数