小编Joh*_*ter的帖子

这是一种与子进程共享只读内存的安全方法吗?

我想分配并初始化一大块连续的内存(~1GB),然后将其标记为只读并分叉多个(比如几十个)将使用它的子进程,而不制作自己的内存副本(机器没有足够的内存().

我是否正确地认为如果我malloc像往常一样将内存标记为只读mprotect(addr, size, PROT_READ),然后fork,这将允许子进程安全地使用内存而不会导致它被复制?(假设我确保在mprotect调用后没有尝试写入分配的内存).

编辑:感谢您的所有答案.

一个后续问题 - 我正在计划使用shmget,但我认为它已经使用mm,因此仅限于较小的分配(请参阅本页的" 限制"部分).例如/proc/sys/kernel/shmmax,服务器上的32MB我正在使用这个.但我想要1GB的连续内存.我错了这个限制吗?

c linux shared-memory

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

为什么向上移位int会产生负数?

我是位操作技巧的新手,我写了一个简单的代码来查看在单个数字上进行单个位移的输出. 2

#include <iostream>
int main(int argc, char *argv[])
{

  int num=2;

 do
   {
     std::cout<<num<<std::endl;
     num=num<<1;//Left shift by 1 bit.

   } while (num!=0);


  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出如下.

2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
-2147483648
Run Code Online (Sandbox Code Playgroud)

显然,连续比特移位到左边由1个比特,将导致零,因为它已经在上面进行,但为什么计算机输出一个负数在最后终止在循环之前(自NUM接通零)??

然而,当我替换时int num=2,unsigned int num=2我获得相同的输出,除了最后一个数字是这个时间显示为正,2147483648而不是-2147483648

gcc在Ubuntu Linux上使用编译器

c c++ bit-manipulation bit-shift

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

从URL中提取主机名

我必须将网站名称修改为sql中的".com"或"co.in"

示例:假设我的站点地址为"http://stackoverflow.com/questions/ask?title=trim".我需要将结果作为"stackoverflow.com".

在某种情况下它可能像"www.google.co.in"然后我需要它是"google.co.in"

sql sql-server

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

谷歌浏览器:搜索API?

我正在寻找一种在我的网站上公开Goog​​le搜索功能的方法,以便Chrome用户可以使用上下文相关搜索(例如:)

Chrome搜索http://img19.imageshack.us/img19/7762/chromesearch.png

我知道YouTube归谷歌所有,但我不记得以前我看过这个功能的第三方网站.无论如何,我在google-labs或code.google.com上找不到任何引用,所以我转向你了.

如果有人对如何公开这个或参考文档有任何见解,我将非常感激.

search google-chrome opensearch web

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

strsep()用法及其替代方法

#include <stdio.h>
#include <string.h>

int main() {

char *slogan = "together{kaliya} [namak]";
char *slow_gun = strdup(slogan);

char *token = strsep(&slow_gun, "{");

printf ("\n slow_gun: %s\n token: %s\n", slow_gun, token);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我执行它时:

$ cc -o try try_strsep.c
$ ./try

 slow_gun: kaliya} [namak]
 token: together  
Run Code Online (Sandbox Code Playgroud)

但是,当我将char*口号改为:

char *slogan = "kalia} [namak]";
Run Code Online (Sandbox Code Playgroud)

并执行相同的程序:

$ vi try_strsep.c 
$ cc -o try try_strsep.c
$ ./try

 slow_gun: (null)
 token: kalia} [namak]
Run Code Online (Sandbox Code Playgroud)

我的问题是,所以当我使用strsep()并且输入字符串没有我正在寻找的模式时,返回strsep()是错误的.我可以验证strsep()是否找不到模式的唯一方法是检查if (slow_gun == NUll).

如果我有char *slogan …

c string tokenize strsep

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

我在哪里可以下载 stdlib.h 中声明的函数的源代码?

我在哪里可以下载 stdlib.h 的最新或标准库的源代码?我想看看这些功能是如何实现的,比如atoi、strtol等?

c open-source standard-library

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

PHP解释器源中的main()方法在哪里?

当我读到用C编写PHP源代码时,我找不到main()方法; 有人能帮助我吗?

php c

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

了解Boost.spirit的字符串解析器

#include <iostream>
#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;
int main ()
{
    using qi::string;

    std::string input("a");
    std::string::iterator strbegin = input.begin();
    std::string p;
    bool ok = qi::phrase_parse(strbegin, input.end(),
            ((string("a")  >> string("a")) | string("a")),
            qi::space,                  
            p);                               

    if (ok && strbegin == input.end()) {
        std::cout << p << std::endl;
        std::cout << p.size() << std::endl;
    } else {
        std::cout << "fail" << std::endl;
        std::cout << std::string(strbegin, input.end()) << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

该计划输出aa.这怎么可能?输入字符串是a.解析器应匹配aaa.我写的string("a")只是测试运营商.

使用时char_ …

c++ parsing boost boost-spirit boost-spirit-qi

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

禁用Netbeans自动svn忽略?

如何阻止Netbeans自动处理svn ignore" .swp"文件?

我使用Netbeans作为我的主要开发环境,但我经常同时使用gvim进行快速编辑.gvim使用.swp扩展名创建临时文件,Netbeans似乎正在扫描我的代码文件夹并svn ignore为这些文件添加属性.

我可以看到这对人们有用,但我想禁用它 - 无论如何,.swp文件都没有显示为无版本,因此它们不是问题,而是由于svn ignore只是由于当我使用svn命令行界面时,会产生一大堆修改垃圾邮件.

知道如何禁用此功能吗?

svn netbeans netbeans6.7

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

如何将环境变量传递给Ubuntu上的Netbeans Makefile?

我在Linux上使用Netbeans(Ubuntu 9.04)来构建一个C项目.

如何传入一个环境变量,以便它对Makefile可见?

如果我执行正常操作export MYVAR="xyz"然后从命令行运行make,这当然可以正常工作.

但是Netbeans似乎没有使用.bashrc环境,所以如果我点击Netbeans中的"build",make就会失败.

有趣的是,似乎问题不MacOSX上发生-我已经添加了变量~/.MacOSX/environment.plist,并且该值可见的Netbeans的.

我发现这篇帖子建议修改~/netbeans-6.8/etc/netbeans.conf.我试过这个,通过添加-J-DMYVAR=xyz到结尾netbeans_default_options,即:

netbeans_default_options="-J-client -J-Xverify:none -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true -J-DMYVAR=xyz"
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

linux ubuntu netbeans makefile environment-variables

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