我想用字符串填充正则表达式变量.
import re
hReg = re.compile("/robert/(?P<action>([a-zA-Z0-9]*))/$")
hMatch = hReg.match("/robert/delete/")
args = hMatch.groupdict()
args变量现在是一个带有{"action":"delete"}的词典.
我该如何扭转这一过程?使用args dict和regex模式,我如何获得字符串"/ robert/delete /"?
它有可能像这样有一个功能吗?
def reverse(pattern, dictArgs):
谢谢
我想从内核空间写入一个日志文件.我可以创建,打开和关闭文件(/var/log/my_kern_module.log),但如果我尝试写入内容,我的模块崩溃...所以我知道内核空间的读/写文件很糟糕,但我必须这样做它在这个模块中.你有什么建议可以帮助我吗?谢谢
在这里,您可以找到在我的内核模块上执行写入的代码.它代码运行到一个线程(kthread)
mutex_lock(&gl_mtx_writelog);
      printk(KERN_EMERG "Readed : %s\n", buffer);
      fd = filp_open("/var/log/my_kern_module.log", O_CREAT | O_WRONLY | O_APPEND, S_IRWXU);
      if (!IS_ERR (fd)) {
        fs = get_fs();
        set_fs(KERNEL_DS);
        do_sync_write(fd, buffer, readed, 0);
        set_fs(fs);
        filp_close(fd, NULL);
      }
      mutex_unlock(&gl_mtx_writelog);
所以,我试过使用fd-> f_op-> write(...),但模块也崩溃了.
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<c10df83a>] do_sync_write+0x6a/0xe0
*pde = 00000000
Oops: 0000 [#1] SMP
last sysfs file: /sys/module/snd_mixer_oss/initstate
Modules linked in: trigger_server snd_seq_dummy snd_seq_oss snd_seq_midi_event s                          nd_seq snd_seq_device snd_pcm_oss snd_mixer_oss ipv6 pcmcia pcmcia_core agpgart                           lp fuse ppdev …我在最新版本中遇到rails的问题.我已经创建了一个新的应用程序(rails new MyProject),但我没有脚本/生成,只有脚本/ rails,当我输入
ruby ./script/rails generate plugin my_plugin
"Could not find generator plugin.".
你知道如何生成插件模板吗?没有这个命令就可以创建插件吗?
PS:我正在使用Rails 3.2.1和ruby 1.8.7 [universal-darwin11.0]
再次,我需要你的内核模块的帮助.我已经实现了一个客户端模块,但每次连接函数都返回errno = 110(超时).我不明白为什么?为了测试这个模块,我在监听模式下启动了netcat(nc -vl -p4242).你对这个神秘的bug有什么建议吗?
int             init_module(void)
{
  struct socket*        sock = NULL;
  struct sockaddr_in*   dest = {0};
  int                   retVal = 0;
  dest = (struct sockaddr_in*)kmalloc(sizeof(struct sockaddr_in), GFP_KERNEL);
  sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
  dest->sin_family = AF_INET;
  dest->sin_addr.s_addr = htonl(in_aton("127.0.0.1"));
  dest->sin_port = htons(4242);
  printk(KERN_EMERG "Connect to %X:%u\n", dest->sin_addr.s_addr, 4242);
  retVal = sock->ops->connect(sock, (struct sockaddr*)dest, sizeof(struct sockaddr_in), !O_NONBLOCK);
  if (retVal >= 0) {
    printk(KERN_EMERG "Connected\n");
    sock_release(sock);
  }
  else
    printk(KERN_EMERG "Error %d\n", -retVal);
  return (0);
}
调试输出(dmesg)
Message from syslogd@century at Sun Jun 19 …