我需要计算ls转储中每行的一个字符串(pathfile)的md5sum directory_listing_file:
./r/g4/f1.JPG
./r/g4/f2.JPG
./r/g4/f3.JPG
./r/g4/f4.JPG
Run Code Online (Sandbox Code Playgroud)
但是应该在没有初始点的情况下计算md5sum.我写了一个简单的脚本:
while read line
do
echo $line | exec 'md5sum'
done
./g.sh < directory_listnitg.txt
Run Code Online (Sandbox Code Playgroud)
如何从每行中删除第一个点?
我有以下输入,
OK SYS 10 LEN 20 12 43
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt,1234 /data/c13af4/f.txt
.
Run Code Online (Sandbox Code Playgroud)
我想提取除包含" OK SYS 10 LEN 20"的行和包含单个"."(点)的最后一行之外的所有输入.也就是说,我想提取以下内容
1233a.fdads.txt,23 /data/a11134/a.txt
3232b.ddsss.txt,32 /data/d13f11/b.txt
3452d.dsasa.txt.1234 /data/c13af4/f.txt
Run Code Online (Sandbox Code Playgroud)
我试过以下,
for item in output:
matchObj = re.search("^(?!OK) | ^(?!\\.)", item)
if matchObj:
print "got item " + item
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为它不会产生任何输出.
在linux环境中调试我们的应用程序时,我们可以观察到一些事件 - POLLHUP|POLLIN仅在linux上发生.我们的应用程序使用unix套接字.当我们这样做时:
ret = poll(xpoll->pfd, xpoll->pfd_count, xpoll_timeout);
Run Code Online (Sandbox Code Playgroud)
strace显示:
poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=6, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 3, 16) = 1
([{fd=7, revents=POLLIN|POLLHUP}])
Run Code Online (Sandbox Code Playgroud)
那种情况永远不会发生在solaris(同样的应用程序)中:结果显示:
2463/3: fd=569 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
2463/3: fd=639 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
2463/3: fd=631 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=POLLIN
2463/3: fd=1160 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
2463/3: fd=400 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
Run Code Online (Sandbox Code Playgroud)
你能解释一下我在solaris民意调查和liunx民意调查之间的区别吗?提前获取所有答案.
为了我的好奇心,我编写了一个程序来显示我的结构的每个字节.这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <limits.h>
#define MAX_INT 2147483647
#define MAX_LONG 9223372036854775807
typedef struct _serialize_test{
char a;
unsigned int b;
char ab;
unsigned long long int c;
}serialize_test_t;
int main(int argc, char**argv){
serialize_test_t *t;
t = malloc(sizeof(serialize_test_t));
t->a = 'A';
t->ab = 'N';
t->b = MAX_INT;
t->c = MAX_LONG;
printf("%x %x %x %x %d %d\n", t->a, t->b, t->ab, t->c, sizeof(serialize_test_t), sizeof(unsigned long long int));
char *ptr = (char *)t;
int i;
for (i=0; i < …Run Code Online (Sandbox Code Playgroud) 继续我在C中的实验,我想看看位字段是如何放在内存中的.我正在使用英特尔64位机器.这是我的一段代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int main(int argc, char**argv){
struct box_props
{
unsigned int opaque : 1;
unsigned int fill_color : 3;
unsigned int : 4;
unsigned int show_border : 1;
unsigned int border_color : 3;
unsigned int border_style : 2;
unsigned int : 2;
};
struct box_props s;
memset(&s, 0, 32);
s.opaque = 1;
s.fill_color = 7;
s.show_border = 1;
s.border_color = 7;
s.border_style = 3;
int i;
printf("sizeof box_porps: %d sizeof unsigned int: %d\n", …Run Code Online (Sandbox Code Playgroud) 我想*在我的Linux终端窗口上闪烁(星号),所以我想到使用ANSI控制代码并在循环中首先写入*然后sleep(1)写入" "(空格/空字符串)但它不起作用 - 看不到任何东西.为什么?
这是我的代码:
#include <stdio.h>
#include <unistd.h>
void blink(){
while(1){
printf("\033[2;2H*");
sleep(1);
printf("\033[2;2H ");
}
}
int main(void){
blink();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想在我的xml中更改一个属性('voltage'):
...
<detector voltage="1.2e3f"/>
...
Run Code Online (Sandbox Code Playgroud)
这是我试图这样做的方式:
void save_detector_attr(xmlNode *node, xmlDoc *doc){
char *voltage;
xmlAttrPtr s_vnewattr;
char buf[128];
xmlNode *cur = node->xmlChildrenNode;
float sv;
int cnt = 0;
while(cur != NULL) {
if (cur->type == XML_ELEMENT_NODE) {
if (!xmlStrcmp(cur->name, "detector")){
voltage = xmlGetProp(cur, "voltage");
sv = atof(voltage);
snprintf(buf, 128, "%f", sv + 20.1 );
s_vnewattr = xmlNewProp (cur, "voltage", buf);
printf(" SAVING to voltage value: %s\n", buf);
}
}
cur = cur->next;
}
xmlSaveFormatFile ("./mc2x.xml", doc, 1);
Run Code Online (Sandbox Code Playgroud)
不幸的是,在调用该函数后,我没有重写属性,而是使用了这个新文件:
<detector voltage="1.2e3f" voltage="1220.100000"/> …Run Code Online (Sandbox Code Playgroud) 当我从中删除元素时,如果调用了默认析构函数,我感到很好奇std::map。这是我做的一个例子:
class CTestMap{
public:
CTestMap() {
std::cout << "default constructor called" << std::endl;
}
CTestMap(int id) {
std::cout << "created object: " << id << std::endl;
m_id = id;
}
~CTestMap() {
std::cout << "destroyed object: " << this->m_id << std::endl;
}
int get_id(){
return m_id;
}
int m_id;
};
int main(void){
std::map<int, CTestMap>m;
std::map<int, CTestMap>::iterator m_it;
std::cout << "created map " << std::endl;
CTestMap t1(1);
std::cout << "created test object: " << t1.get_id() << std::endl;
CTestMap t2(2); …Run Code Online (Sandbox Code Playgroud) 我正在创建一个UDP套接字(centos 6),我想发送广播消息。一切正常,创建套接字有效-socket(..)返回value = 25,但是:
int val = 1;
if (setsockopt(a, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val)) < 1){
debug("setsockoopt failed with errno: %d, socket %d", errno, a);
}
Run Code Online (Sandbox Code Playgroud)
setsockopt将errno设置为value =2。Communictaion工作正常,我将udp数据包发送到xxx255主机,我的所有应用程序都将其接收,但是我想知道errno的来源(errno = 2 =没有此类文件或目录)
最好的祝福
我正在尝试运行函数,它将通过传递指针返回两个字符串:
#include <stdio.h>
void gen_str(char *str1, char *str2){
char *s1 = "abcd";
char *s2 = "defg";
str1= strdup(s1);
str2= strdup(s2);
printf("\n\r str1 %s str2 %s\n\r", str1, str2);
}
int main(void){
char *s1, *s2;
gen_str(s1, s2);
printf("\n\r s1 %s s2 %s\n\r", s1, s2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
其中输出是:
str1 abcd str2 defg
s1 8, s2 8,
Run Code Online (Sandbox Code Playgroud)
有人能告诉我,我做错了什么?我认为strdup()会为我的新字符串分配内存,并返回填充字符串的指针.但实际行为是不同的.所以我在寻求帮助.
来自字符串:
l="\tsome string in line 1\n\tcmd: DIR @1332243996 (2012.03.20 12:46:36) state op:29 cfg:0\n\tline 3 some other string"
Run Code Online (Sandbox Code Playgroud)
我想提取"DIR",因此我创建了正则表达式:
j = re.search(r'cmd: \w+', l)
Run Code Online (Sandbox Code Playgroud)
但当我这样做时:
print j.group()
Run Code Online (Sandbox Code Playgroud)
我有:
cmd: DIR
Run Code Online (Sandbox Code Playgroud)
我应该怎么做,只获得"DIR",而不是"cmd:",例如:
print j.group()
DIR
Run Code Online (Sandbox Code Playgroud)
thx所有答案
我需要列表,其中包含一些共同的元素:
p = [('link1/d/b/c', 'target1/d/b/c'), ('link2/a/g/c', 'target2/a/g/c'), ..., ('linkn/b/b/f', 'targetn/b/b/f')]
q = [['target1/d/b/c', 'target1', 123, 334], ['targetn/b/b/f', 'targetn', 23, 64], ... ,['targetx/f/f/f', 'targetx', 999, 888]]
Run Code Online (Sandbox Code Playgroud)
我试图比较它们并找到共同的元素,然后用结果做一些工作:
do_job('target1/d/b/c', 'target1', 123, 334, 'link1/d/b/c')
Run Code Online (Sandbox Code Playgroud)
现在我使用简单和非常慢的alghortihm:
for item in p:
link = item[0]
target = item[1]
for item2 in q:
target2 = item2[0]
if target2 == target:
do_some_job(...)
Run Code Online (Sandbox Code Playgroud)
我知道,我需要比较这两个列表并创建一个包含所有元素的列表,例如:
pq = [['target1/d/b/c', 'target1', 123, 334, 'link1/d/b/c'], ..., ['targetn/b/b/f', 'targetn', 23, 64, 'linkn/b/b/f']]
Run Code Online (Sandbox Code Playgroud)
然后do_some_job(pq)每当我找到相同的元素时调用而不是调用它
如何获得它?
最好的祝福
我希望有一个带有map变量的类作为私有变量:
class CTest{
private:
std::map<int, int> m_map;
public:
std::map<int int>::iterator get_iterator();
void add(int key, int val) { m_map[key] = val; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在函数中some_action()我只能get_iterator()在地图上使用迭代,例如:
CTest c;
/* here i want to go through that m_map, but i cannot have access to it */
void some_actoin(){
???
}
int main(void){
c.add(1, 1);
c.add(2, 3);
some_action();
}
Run Code Online (Sandbox Code Playgroud)
关于J.