小编pru*_*nat的帖子

如何推动没有历史的新分支

我有两个不相关的分支,主人和配置的git repo.我创建了配置,清除了所有文件,然后只放入配置文件中.现在我想在远程仓库上推送它,但因为它是新的,空分支(没有我所有更改的日志和原始分支的旧版本).

我怎样才能清除所有的历史并推动它?

git

76
推荐指数
4
解决办法
5万
查看次数

你如何有效地实现尾部?

在*NIX中实现tail的有效方法是什么?我提出(写)两个简单的解决方案,都使用一种循环缓冲区将线加载到圆形结构(数组|双向链接循环列表 - 为了好玩).我在busybox中看到了部分较旧的实现,从我的理解,他们使用fseek找到EOF,然后"向后"阅读东西.那里有更清洁,更快的东西吗?我在面试时被问到这个问题并且提问者看起来并不满意.先感谢您.

c unix linux tail

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

内核的"container_of" - 任何使ISO符合标准的方法吗?

在查看Linux内核的双链循环列表的实现时,我发现了以下宏:

#define container_of(ptr, type, member) ({           \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
Run Code Online (Sandbox Code Playgroud)

这种方式的工作方式是返回指向结构的指针,只给出其成员之一的地址:

struct blabla
{
    int value;
    struct list_head *list;
}
Run Code Online (Sandbox Code Playgroud)

因此,只有指向list的指针,你才可以获得指向blabla的指针(并获得"value").对于我的问题,我如何使其尽可能便携(符合C89/C99的最佳情况?).由于使用了typeof(),这只是gcc.

这是我到目前为止所得到的:

#define container_of(ptr, type, member) (                  \
                (type *) (char *)(ptr)-offsetof(type,member)\
                )
Run Code Online (Sandbox Code Playgroud)

此代码段是否符合ISO标准(因此应该能够在任何符合标准的编译器上编译)?

c linked-list standards-compliance c99 linux-kernel

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

从 eclipse 的内部浏览器打开网站?

谁能帮助我从 Eclipse 的内部(嵌入式)浏览器中打开网页?我正在与浏览器并行运行 Linux(平铺窗口管理器)和 Eclipse-3.7.2,这很痛苦。

我希望它能够轻松地从我的代码中读取需求,同时读取代码。这可能是超级用户的问题,但它与 Eclipse 相关,所以我想我在这里有更好的答案。

提前致谢。

蚀

编辑:我正在运行 gentoo linux 和 swt-3.7.1,并在 xulrunner 支持中编译。

edit2:添加 gui 菜单图片以响应下面的答案。 无菜单

eclipse linux gentoo embedded-browser eclipse-indigo

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

C位数组宏,谁能解释我这些如何工作?

我正在尝试为学校项目实施erathostenes的筛选,我决定使用位数组来实现.在我搜索材料时,我遇到了这三个宏,它们完美无缺,但我无法真正阅读(理解)它们.

#define ISBITSET(x,i) ((x[i>>3] & (1<<(i&7)))!=0)
#define SETBIT(x,i) x[i>>3]|=(1<<(i&7));
#define CLEARBIT(x,i) x[i>>3]&=(1<<(i&7))^0xFF;
Run Code Online (Sandbox Code Playgroud)

能否请你详细解释其中至少一个,我对C中的按位操作有基本的了解(基本上我知道它们"存在").

这会在另一个使用不同字节序的架构上工作吗?提前致谢.

c macros bitarray

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

如何在bash中获取变量配置的值?

我有一个linux配置文件,其格式如下:

VARIABLE=5753
VARIABLE2=""
....
Run Code Online (Sandbox Code Playgroud)

如何使用标准的linux工具或正则表达式获得VARIABLE2的fe值?(我需要解析文件中的目录路径).提前致谢.

regex linux bash

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

"无效使用void表达式"

我需要编写一个在bitarray上运行的宏,如下所示:

   array[0] = number of bits in bitarray (integer) 
   array[1..n] = bits
Run Code Online (Sandbox Code Playgroud)

宏必须看起来像:

GetBit(pointer, index)
Macro *must* return 0,1 or call function similar to exit().
Run Code Online (Sandbox Code Playgroud)

这是我应该写的我(工作)内联函数版本的宏:

static inline unsigned long GetBit(BitArray_t array, unsigned long index)
{
        if ((index) >= array[0])
                        exit(EXIT_FAILURE);
        else
                return (GetBit_wo_boundary_checks(array,index));
}
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的:

#define GetBit(array,index)\
                (((index) < array[0] || exit(EXIT_FAILURE)) ?\
                        GetBit_wo_boundary_checks(array,index) : 0)
Run Code Online (Sandbox Code Playgroud)

我的问题是,这种具有做索引边界检查(ⅰ<P [0])和出口它试图与GetBit_wo_boundary_checks访问未定义的存储之前(P,I).

我认为我可以通过将退出置于短路评估条件来解决这个问题,但我得到:"无效使用void表达式".

当index高于array [0]中定义的最大值时,有没有办法使这个表达式宏透明地exit()?

c c-preprocessor

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

没有 cmd 时 getopts 打印帮助。行参数匹配

我试图在 bash 中使用 getopts 来解析命令行参数,但如果没有匹配的参数(或没有给出 cmdline 参数),我无法弄清楚如何实现“默认”操作。

这是我迄今为止尝试过的略有简化的版本:

while getopts v:t:r:s:c: name;
do
        case $name in
        v) VALIDATE=1;;
        t) TEST=1;;
        r) REPORT=1;;
        s) SYNC=1;;
        c) CLEAR=1;;
        *) print_help; exit 2;;
        \?) print_help; exit 2;;
        esac
done
Run Code Online (Sandbox Code Playgroud)

有没有(简单的)方法让它调用 print_help; 出口2;在不匹配的输入上?

bash shell getopt getopts command-line-arguments

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

如何检测stderr是否从脚本中连接到终端?

我想试验终端和彩色输出,但同时我想让stdout/stderr重定向到文件,而不必处理这些转义序列.

有没有办法检查是否stderr从shell脚本中连接到终端?

bash shell

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

如何清除 C 中的结构数组,然后释放该内存?

两个问题:

  1. 如何快速清除结构体数组?
  2. 如何释放结构体成员分配的内存?

代码:

struct sComputerNames
{
    TCHAR *sName;   // Using a pointer here to minimize stack memory.   
};

TCHAR *sComputer  = (TCHAR *) calloc(2048+1, sizeof(TCHAR));
struct sComputerNames sCN[4096] = {0};


_tcscpy(sComputer,L"PC1");
sCN[0].sName = (TCHAR *) calloc(128,sizeof(TCHAR));
_tcscpy_s(sCN[0].sName,128,sComputer);


// What is a better way to clear out the structure array?
for (DWORD i=0;i<4096;i++)
{
    free(sCN[i].sName);
    sCN[i].sName=NULL;
}


// Assign a new value
_tcscpy(sComputer,L"PC2");
sCN[0].sName = (TCHAR *) calloc(128,sizeof(TCHAR));
_tcscpy_s(sCN[0].sName,128,sComputer);


free(sCN);sCN=NULL;     // Erroring here - how to free memory allocated by …
Run Code Online (Sandbox Code Playgroud)

c struct

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