我在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)
建议?
事实证明,对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)
建议?
在make期间,我创建了我嵌入链接输出中的字符串字段.很有用.
除了命令的复杂sed
/ grep
解析之外git status
,如何轻松确定工作空间中的文件是否已根据git
?进行修改?
我的第一个想法是写一个interator,或者做一些列表理解.但是,就像我在python中编写的每个5-10行方法一样,有人通常可以指示我在标准库中调用来完成相同的操作.
我如何从两个元组x
和y
一个字典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) 我正在为一个设备编写一个内核驱动程序,该驱动程序会定期生成定期读取数据.用户空间程序非常适合使其成为阻塞驱动程序.
有什么方法可以在驱动程序中暂停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)
瞧!我现在要测试......
一个类似的(描述性较差),职位是在这里.
我正在尝试使用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) 我编写了一个服务器,它接受辅助端口上的套接字连接,以便传输通常发送的调试信息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) at
我正在尝试从 cgi 脚本执行命令。该脚本在 Ubuntu () 上以默认 Apache2 用户身份执行www-data
,但默认 shell 是/bin/sh
且不是bash
。除了运行的安全问题(参见我的其他at
问题)之外,我可以更改默认的 shell,但我想知道,是否有更便携的方式来编写这个友好的命令?www-data
bash
at now + 5 minutes <<< 'python my_script.py data_arg'
Run Code Online (Sandbox Code Playgroud) 我有一个序列化的结构,通过套接字发送.我需要以块的形式读取它,因为它的一个字段包含剩余数据的大小:我需要读取前几个字节,找出长度并阅读其余部分.这就是我所拥有的:
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做同样的事情?先感谢您.
这里乏善可陈的反应让我想到了这一点.
我一直背负着一种器件(Analog Devices 525x)(来自数据表,第16页):
在内部[EEPROM]写周期内禁用I2C接口.
这似乎不公平,因为" 我现在正从沙发上下来,所以不要暂时使用它,因为我让一个人在座垫上扯下来 ".老实说,为什么这是我的问题?
无论如何,数据表表明确认轮询就是答案 - 进入Linux内核...... Linux GPIO位是否为基础?I2C驱动程序是否提供了这样做的机制? 基本上发送写入位设置的地址,并继续这样做,直到出现ACK.
我在带有后端口GPIO位抨击驱动程序的ARM上使用2.6.14(我认为是2.6.19).