我在几个问题看这里,特别是这一个,但我仍然感到困惑.
我有一个服务器设置有一个慢速上行链接,我通过SSH隧道访问.在它上面,我克隆了一个Linux内核的裸存储库(origin指向kernel.org).然后我克隆了我的家用机器上的裸存储库,签出了标签,创建了一个分支('测试'说),在该分支上进行了更改,最后将更改推送到我服务器上的裸存储库.
现在我在一个客户端站点,想要检查分支机构.为了避免我在客户端站点的缓慢上行链路,我从kernel.org克隆了linux repo并通过SSH隧道将"origin"更改为指向我的服务器. 我可以看到分支,但无法检查出来:
~/linux-3.0.y$ git version
git version 1.7.0.4
~/linux-3.0.y$
~/linux-3.0.y$ git status
# On branch master
nothing to commit (working directory clean)
~/linux-3.0.y$
~/linux-3-0.y$ git remote show origin
git-user@localhost's password:
* remote origin
Fetch URL: git+ssh://git-user@localhost:48884/home/git-user/linux-3.0.y
Push URL: git+ssh://git-user@localhost:48884/home/git-user/linux-3.0.y
HEAD branch: master
Remote branches:
test new (next fetch will store in remotes/origin)
master new (next fetch will store in remotes/origin)
Local ref configured for 'git push':
master pushes to master (up to date) …Run Code Online (Sandbox Code Playgroud) 我正在select()Linux/ARM平台上使用,看看udp套接字是否收到了数据包.如果它在超时之前返回(检测到数据包),我想知道select select中剩余多少时间.
有点像:
int wait_fd(int fd, int msec)
{
struct timeval tv;
fd_set rws;
tv.tv_sec = msec / 1000ul;
tv.tv_usec = (msec % 1000ul) * 1000ul;
FD_ZERO( & rws);
FD_SET(fd, & rws);
(void)select(fd + 1, & rws, NULL, NULL, & tv);
if (FD_ISSET(fd, &rws)) { /* There is data */
msec = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
return(msec?msec:1);
} else { /* There is no data */
return(0);
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何使用文件的内容作为命令行参数,但我正在努力学习语法.
说我有以下内容:
# cat > arglist
src/file1 dst/file1
src/file2 dst/file2
src/file3 dst/file3
Run Code Online (Sandbox Code Playgroud)
如何使用arglist文件中每行的内容作为参数来表示cp命令?
我正在使用嵌入式Linux部署,并使用不编译I2C库函数调用的交叉编译器工具链.
如何确定系统上库的精确版本,以便重建工具链?
我不打算更换部署的库,因为我知道它们可以工作(包括I2C),所以我认为我需要以下内容:
我想我可以从以下假设binutils库是版本2.2.5.内核被修改为我的源代码.
root@dev-box />ls /lib/ -al
drwxrwxrwx 3 root root 1024 Apr 27 09:44 .
drwxrwxrwx 14 root root 1024 Jan 1 1970 ..
-rwxrwxrwx 1 root root 105379 Jan 1 1970 ld-2.2.5.so
lrwxrwxrwx 1 root root 16 Jan 1 1970 ld-linux.so.2 -> /lib/ld-2.2.5.so
lrwxrwxrwx 1 root root 16 Jan 1 1970 ld.so.1 -> /lib/ld-2.2.5.so
-rwxrwxrwx 1 root root 1288601 Jan 1 1970 libc.so.6
-rwxrwxrwx 1 root root 25441 Jan 1 1970 libcrypt.so.1
-rwxrwxrwx …Run Code Online (Sandbox Code Playgroud) 我过去必须多次这样做,而且我从未对结果感到满意.
任何人都可以建议一种快速的方法从源到目的地复制连续的位阵列,其中源和目标可能没有在方便的处理器边界上对齐(右移)?
如果源和目标都没有对齐,问题很快就会变成一个只有一个没有对齐的问题(在第一个副本之后说).
作为一个起点,我的代码不可避免地最终看起来像下面这样(未经测试,忽略副作用,这只是一个关闭袖口的例子):
const char mask[8] = { 1, 3, 7, 15, 31, 63, 127, 255 };
/* Assume:
* - destination is already zeroed,
* - offsets are right shifts
* - bits to copy is big (> 32 say)
*/
int bitarray_copy(char * src, int src_bit_offset, int src_bit_len,
char * dst, int dst_bit_offset) {
if (src_bit_offset == dst_bit_offset) { /* Not very interesting */
} else {
int bit_diff_offset = src_bit_offset - dst_bit_offset; /* assume positive */ …Run Code Online (Sandbox Code Playgroud) 我把tarball的软件版本放在一起,其中包括几个不同项目的输出.这些tarball本身被认为是一个版本.发布的tarball包括BOM(物料清单),其中列出了其中的所有项目及其关联的SHA1(git)签名.
为了更容易地重新创建这些tarball,我将一个make系统放在一起,逐行解析BOM,将存储库克隆到一个子目录中,检查指定的版本,然后执行构建.在我的BOM中说一行:
prog-a b5286f27d65ef20eb4508f76de5a1c57d8b21d85 git+ssh://git-user@localhost/~/prog-a
Run Code Online (Sandbox Code Playgroud)
存储库,如果尚未克隆,将被放入repos/prog-a,然后结帐完成(cd repos/prog-a; git checkout b5286f27d6),最后是make(make -C repos/prog-a).
我还没弄明白如何让gnu决定代码的签出版本是否已经构建了我需要的二进制文件.目前,每个子项目都被迫结账和重建.
如何向GNU make提供git repo的SHA1,以便它可以决定项目是否过时并需要更新(通过执行a git checkout)?
[编辑] 这是我的模式文件:
REPO_DIR=materials
BOM=$(shell sed -r 's/([^ ]+).+/\1/' bom)
BOM_DIR=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1_' bom)
BOM_BLD=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1/\1_' bom)
.PHONY: clean dist-clean
all: $(BOM)
clean:
@rm $(BOM) $(BOM_BLD) -rf
dist-clean: clean
@rm $(REPO_DIR)
.SECONDEXPANSION:
$(BOM): % : $(REPO_DIR)/$$*/$$*
@echo " CP $< $@"
@cp $< $@
$(BOM_BLD): % : $$(*D)
@echo " GIT …Run Code Online (Sandbox Code Playgroud) 假设我们有一个班级
class Egg
{
static Egg e;
int i;
Egg(int ii):i(ii) {}
Egg(const Egg &); //Prevents copy-constructor to be called
public:
static Egg* instance() {return &e}
};
Egg Egg::e(47);
Run Code Online (Sandbox Code Playgroud)
此代码保证我们不能创建任何对象,但只能使用静态对象.但是我们如何在类中声明同一个类的静态对象.
还有一件事因为e是静态对象,静态对象只能调用静态成员函数,所以如何在静态对象e中调用构造函数,其构造函数也是私有的.
在Linux write()函数中处于相当高的级别,它会过滤掉写入0个长度缓冲区的请求.这是有道理的.谁想要操作系统浪费它的时间钻孔层只是为了确定没有工作要做?
好吧......我
这与这个问题有关 ; 如果握手错误的话,如果地址(在数据之前在总线上发送)会产生错误,那么发现bit-banged I2C驱动程序将提供一个可能有用的返回码.
可以在地址之后发送虚拟数据,但不能发送我正在使用的设备.(也许我会尝试阅读......).
所以问题是:如果内核允许零(0)长度写入,会释放什么样的地狱?
实际上,我不明白在 PNG 文件中使用 sBIT 块。
我正在存储来自 11 位/通道 RGB 源的 PNG 文件,因此我尽职尽责地在我的 (c) 代码中设置了 sBIT 块:
...
png_color_8 sig_bit;
sig_bit.gray = 0;
sig_bit.alpha = 0;
sig_bit.red = 11;
sig_bit.green = 11;
sig_bit.blue = 11;
png_set_sBIT(png_ptr, info_ptr, &sig_bit);
...
/* save the png */
Run Code Online (Sandbox Code Playgroud)
在 Windows 查看器(原生 Vista 图片查看器/Paint.net)中查看图像时,低 8 位被截断,因此我只能看到高 3 位。我原以为该sBIT块会自动指示读者将像素左移 5 位,以 MSB 证明显示数据的合理性。似乎并非如此。
当我在我的代码中打开有或没有 sBIT 块的 png 文件时,请执行以下操作:
png_color_8p sig_bit;
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT)) {
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
png_set_shift(png_ptr, sig_bit);
}
Run Code Online (Sandbox Code Playgroud)
像素数据相同。
sBIT chunk的使用模型是什么?我可以以某种方式使用sBIT …
我有一个词典列表(缩写).
my_list = [{ 'id':1, 'val':123 }, {'id':2, 'val':456 }, {'id':2, 'val':789 }]
Run Code Online (Sandbox Code Playgroud)
如何计算具有特定键的指定值的字典的出现次数(在本例中为' id')?有没有办法利用计数(my_list.count('id' = 1)?!?)