小编Jam*_*mie的帖子

如何在Bash中的带引号的字符串中使用环境变量

我在bash脚本中尝试了以下各种形式:

#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Run Code Online (Sandbox Code Playgroud)

但我无法获得正确扩展COLUMNS环境变量的语法.

我尝试了以下各种形式:

svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
Run Code Online (Sandbox Code Playgroud)

svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
Run Code Online (Sandbox Code Playgroud)

eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Run Code Online (Sandbox Code Playgroud)

建议?

bash environment quotes

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

如何使用文件描述符刷新写入?

事实证明,对open()与fopen()的整体误解源于ARM上Linux 2.6.14内核中的错误I2C驱动程序.向后移动一个工作位捣乱的驱动程序解决了我试图解决的问题的根本原因.

我试图弄清楚Linux(I2C)中串行设备驱动程序的问题.似乎通过在设备上的写入和读取之间添加定时OS暂停(休眠),事情起作用......(更好).

旁白:I2C的本质是主机读取或写入的每个字节都由线路另一端的设备(从机)确认 - 暂停改进的事情鼓励我将驱动程序视为异步工作 - 这是我的意思无法调和公交车的运作方式.Anyhoo ......

我想无论是想刷新写可以肯定(而不是使用固定的工期暂停),以某种方式测试读/写事务已完成在多线程友好的方式.

使用的麻烦fflush(fd);是它需要'fd'是流指针(不是文件描述符),即

FILE * fd = fopen("filename","r+");
... // do read and writes
fflush(fd);
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要使用,ioctl()而不使用流指针.即

int fd = open("filename",O_RDWR);
ioctl(fd,...);
Run Code Online (Sandbox Code Playgroud)

建议?

c linux stdio i2c

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

在Git工作区中检测修改文件的简单方法是什么?

在make期间,我创建了我嵌入链接输出中的字符串字段.很有用.

除了命令的复杂sed/ grep解析之外git status,如何轻松确定工作空间中的文件是否已根据git?进行修改?

git build-process makefile

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

如何制作两个元组来制作字典?

我的第一个想法是写一个interator,或者做一些列表理解.但是,就像我在python中编写的每个5-10行方法一样,有人通常可以指示我在标准库中调用来完成相同的操作.

我如何从两个元组xy一个字典z

x = ( 1, 2, 3 )
y = ( 'a', 'b', 'c')

z = { }
for index, value in enumerate(y):
    z[value] = x[index]

print z

# { 'a':1, 'b':2, 'c':3 }
Run Code Online (Sandbox Code Playgroud)

python dictionary tuples

14
推荐指数
2
解决办法
5265
查看次数

如何在linux驱动程序模块中暂停100+毫秒?

我正在为一个设备编写一个内核驱动程序,该驱动程序会定期生成定期读取数据.用户空间程序非常适合使其成为阻塞驱动程序.

有什么方法可以在驱动程序中暂停4到100ms(即执行" ")?在用户空间中,我会做类似于:

tv.tv_sec  = microsecond_delay / 1000000ul;
tv.tv_usec = microsecond_delay % 1000000ul;
(void)select(0, NULL, NULL, NULL, & tv);
Run Code Online (Sandbox Code Playgroud)

要么

gettimeofday(tv,NULL);
Run Code Online (Sandbox Code Playgroud)

并比较结构.

[编辑 - 我自己的回答]

我将在我的驱动程序中使用以下代码:

#include <linux/jiffies.h>
...
schedule_timeout(file->private_data->my_driver_struct.read_pause_jiffies);
Run Code Online (Sandbox Code Playgroud)

瞧!我现在要测试......

linux delay linux-device-driver linux-kernel

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

构建ARM GNU交叉编译器

一个类似的(描述性较差),职位是在这里.

我正在尝试使用Ubuntu上的最新版本推出自己的工具链,并希望在这里有足够的Linux社区,我可以在出现问题时获得有关某些问题的具体建议.

在大家的帮助下,我希望最终能够看到这一点.

几乎每个人都提到的" Crosstool " 首先是一点点(2006年)已经过时了," Crosstool-NG "似乎现在正在我的机器上携带火炬.我宁愿调试进程本身而不是脚本(这似乎需要我理解这个过程).

以下是我到目前为止工作的基本步骤; 目前我被困在尝试编译第一次通过GCC.

失败的地方......

它失败了,因为缺少包含"crti.o"的交叉编译库:

# ./gcc-4.4.1/configure --target=arm-linux --disable-thread --enable-langauges=c 
/bin/bash ../../../gcc-4.4.1/libgcc/../mkinstalldirs .
/usr/src/gnu-4.4.1-build/./gcc/xgcc -B ........
/usr/local/arm-linux/bin/ld: crti.o No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libgcc_s.so] Error 1
make[2]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build/arm-linux/libgcc'
make[1]: *** [all-target-libgcc] Error 2
make[1]: Leaving directory `/usr/src/gnu/gcc-4.4.1-build'
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

构建步骤

在"新配置"的Ubuntu 9.04安装中,以下是我到目前为止所做的步骤:

#New configuration of Ubuntu 9.04
sudo updatedb
sudo apt-get install build-essential subversion …
Run Code Online (Sandbox Code Playgroud)

linux cross-compiling gnu-toolchain

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

如何为关闭的套接字捕获信号(`SIGPIPE`)?

我编写了一个服务器,它接受辅助端口上的套接字连接,以便传输通常发送的调试信息stderr.这个第二个端口 - 一个错误服务端口 - 一次只能有一个连接,这很方便,因为它允许我stderr使用一个dup2(2)调用重定向.(请参阅我是否可以将父进程的stderr重定向到分叉进程上的套接字文件描述符?).

以下代码在各方面都近乎令人满意.当客户端登录到端口时,stderr流将定向到套接字.当另一个客户端登录时,流再次被重定向,并且第一个客户端停止接收:完全令人满意.

在设计不足的情况下,当客户端关闭连接时,服务器崩溃,因为它正在尝试write()关闭的套接字.

我有一个正常的子进程的基本信号处理程序,但我不知道如何在错误套接字关闭时处理来自父进程的特定信号.

如何捕获ERR_PORT_NUM上的连接已关闭并让信号处理程序重新打开(或dup)stderr以/dev/null备下一个等待错误客户端的信号(在父级中)?

另外,当第二个连接时,我应该如何处理原始错误客户端连接?目前第一个客户是悬空.即使非正常关闭第一个连接也是可以接受的.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <errno.h>
#include <pwd.h>
#include <signal.h>
#include <netinet/in.h>
#include <sys/mman.h>

#define PORT_NUM 12345
#define ERR_PORT_NUM 54321

static void child_handler(int signum)
{
    switch (signum) {
        case SIGALRM:
            exit(EXIT_FAILURE);
            break;
        case SIGUSR1:
            exit(EXIT_SUCCESS);
            break;
        case SIGCHLD:
            exit(EXIT_FAILURE);
            break;
    }
} …
Run Code Online (Sandbox Code Playgroud)

sockets linux stdio

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

是否有一个“sh”相当于 bash 的“&lt;&lt;&lt;”重定向运算符?

at我正在尝试从 cgi 脚本执行命令。该脚本在 Ubuntu () 上以默认 Apache2 用户身份执行www-data,但默认 shell 是/bin/sh且不是bash。除了运行的安全问题(参见我的其他at问题之外,我可以更改默认的 shell,但我想知道,是否有更便携的方式来编写这个友好的命令?www-databash

at now + 5 minutes <<< 'python my_script.py data_arg'
Run Code Online (Sandbox Code Playgroud)

bash shell

8
推荐指数
2
解决办法
3294
查看次数

boost :: asio读取从socket到streambuf的n个字节

我有一个序列化的结构,通过套接字发送.我需要以块的形式读取它,因为它的一个字段包含剩余数据的大小:我需要读取前几个字节,找出长度并阅读其余部分.这就是我所拥有的:

    boost::asio::streambuf buffer;
    boost::system::error_code err_code;
    // here I need to read only first 16 bytes
    boost::asio::read(socket, buffer, err_code);
    std::istream is(&buffer);
    boost::archive::binary_iarchive ia(is);
    ia >> my_struct;
Run Code Online (Sandbox Code Playgroud)

我看了看

    boost::asio::async_read(s, boost::asio::buffer(data, size), handler);
Run Code Online (Sandbox Code Playgroud)

但它只能读取数据到boost :: asio :: buffer.我想知道我是否可以使用boost :: asio :: streambuf做同样的事情?先感谢您.

c++ boost streambuf boost-asio boost-serialization

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

Linux内核中的I2C写确认轮询

这里乏善可陈的反应让我想到了这一点.

我一直背负着一种器件(Analog Devices 525x)(来自数据表,第16页):

在内部[EEPROM]写周期内禁用I2C接口.

这似乎不公平,因为" 我现在正从沙发上下来,所以不要暂时使用它,因为我让一个人在座垫上扯下来 ".老实说,为什么这是我的问题?

无论如何,数据表表明确认轮询就是答案 - 进入Linux内核...... Linux GPIO位是否为基础?I2C驱动程序是否提供了这样做的机制? 基本上发送写入位设置的地址,并继续这样做,直到出现ACK.

我在带有后端口GPIO位抨击驱动程序的ARM上使用2.6.14(我认为是2.6.19).

linux arm i2c

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