小编Rob*_*nes的帖子

"Linux内核模块程序员指南"中的chardev.c示例问题

我编译和运行的chardev.c从例子中lkmpg和写入设备时,收到了意想不到的错误:

anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied
Run Code Online (Sandbox Code Playgroud)

模块写入功能如下所示:

/*  
 * Called when a process writes to dev file: echo "hi" > /dev/chardev 
 */
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
    printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
    return -EINVAL;
}
Run Code Online (Sandbox Code Playgroud)

我没有收到无效操作的预期错误,并且错误打印到/ var/log/messages.

我可以从设备上读取没有问题,收到预期的结果:

anon@anon:~/lkmpg$ cat /dev/chardev 
I already told you 6 times Hello world!
Run Code Online (Sandbox Code Playgroud)

使用以下命令手动创建设备/ dev/chardev:

sudo mknod /dev/chardev c 252 0
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

- 编辑 - …

linux kernel kernel-module linux-device-driver

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

从Perl模块导入有条件编译的函数

我有一组日志和调试功能,我想在多个模块/对象中使用它们.我希望能够使用命令行开关全局打开/关闭它们.

下面的代码执行此操作,但是,我希望能够省略包名并将所有内容保存在单个文件中.

更具体地说,我想将日志记录函数名称导入到每个模块中,以便可以在没有任何包名称限定的情况下调用它们(类似于C++ use namespace;指令),并且我希望能够从使用的脚本全局启用/禁用它们它们在我下面的示例代码中.

这与我在此处此处提出的前两个问题有关.

另一件事 - 我不认为我完全理解为什么以下代码有效.

#! /usr/bin/perl -w

use strict;
use Getopt::Long;

{
    package LogFuncs;

    use threads;
    use Time::HiRes qw( gettimeofday );

    # provide tcpdump style time stamp
    sub _gf_time {
        my ( $seconds, $microseconds ) = gettimeofday();
        my @time = localtime($seconds);

        return sprintf( "%02d:%02d:%02d.%06ld",
            $time[2], $time[1], $time[0], $microseconds );
    }

    sub logerr;

    sub compile {
        my %params = @_;

        *logerr = $params{do_logging}
            ? sub {
                my $msg = shift;
                warn …
Run Code Online (Sandbox Code Playgroud)

perl

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

Boost.测试和分叉

我正在使用 Boost.Test 进行单元测试,目前正在单独的线程中运行各种模拟服务器,这些线程从每个测试中启动。为了更准确地测试我的代码,模拟服务器实际上应该位于单独的进程中。

我正在考虑按照这些思路做一些事情:

MY_TEST()
if (fork() == 0) {
    runMockServer();  // responds to test requests or times out, then returns
    exit(0);
}
// Connect to MockServ and Run actual test here
END_TEST()
Run Code Online (Sandbox Code Playgroud)

但我担心这会搞砸测试框架。

这安全吗?有人做过这样的事吗?

如果重要的话,我在 Ubuntu 8.04 上使用 Boost 1.34.1。

c++ boost unit-testing mocking boost-test

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

Java中是否有与C++成员函数指针相同的东西?

在你标记为dup之前,是的,我已经在Java中看到了函数指针,不,它没有真正回答我的问题,主要是因为我对Java很新,所以我真的不明白所有的答案.

这是一些混乱的Java/C++,有没有合理的方法在Java中做到这一点?

public class Foo {
    private int _data;

    /* various other functions */    

    public boolean test1( Foo other ) {  /* do test */ }
    public boolean test2( Foo other ) {  /* do test */ }
    public boolean test3( Foo other ) {  /* do test */ }
    public boolean test4( Foo other ) {  /* do test */ }
}

public class Bar {
    private Foo[] _foos = { /* Init an array …
Run Code Online (Sandbox Code Playgroud)

c++ java

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

C中的Implict函数声明是否实际生成了对象代码?

在讨论中关于转换malloc许多人的返回值已声称隐式声明malloc会导致返回值被转换为int然后重新转换回T*可能导致在以下情况下截断指针:

sizeof(int) < sizeof(void*)
Run Code Online (Sandbox Code Playgroud)

这意味着编译器会执行以下操作:

  1. 链接并调用正确的目标代码定义 malloc
  2. 生成目标代码以将返回值转换为较短的int类型
  3. 生成目标代码以转换回更大的目标指针类型

有人真的可以证明这发生了吗?在64位Linux上使用一些示例代码说?

我自己做,但我无法访问64位机器.

c compiler-construction

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

父母和预分叉儿童之间的文件描述符共享

在Unix网络编程中,有一个预分叉服务器的例子,该服务器使用Unix域管道上的消息传递来指示子进程处理传入连接:

for ( ; ; ) {
    rset = masterset;
    if (navail <= 0)
        FD_CLR(listenfd, &rset);    /* turn off if no available children */
    nsel = Select(maxfd + 1, &rset, NULL, NULL, NULL);

        /* 4check for new connections */
    if (FD_ISSET(listenfd, &rset)) {
        clilen = addrlen;
        connfd = Accept(listenfd, cliaddr, &clilen);

        for (i = 0; i < nchildren; i++)
            if (cptr[i].child_status == 0)
                break;              /* available */

        if (i == nchildren)
            err_quit("no available children");
        cptr[i].child_status = 1;   /* mark child …
Run Code Online (Sandbox Code Playgroud)

unix sockets linux network-programming

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

ANSI C中表达式的条件编译和编译时评估

我想做以下,但编译器不喜欢它:

unsigned short foo = 1;
// do something with foo
#if sizeof(short) * CHAR_BIT > 16
   foo &= 0xffff;
#endif
Run Code Online (Sandbox Code Playgroud)

我知道这个表达式总是可以在编译时完全评估,但是它可能只是在预处理器执行后才进行评估?这在ANSI C中是可行的还是我只需要在运行时进行检查?

c ansi sizeof c-preprocessor

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

从TCPSocket读取在Ruby/Rails中很慢

我有这段简单的代码写入套接字,然后从服务器读取响应.服务器速度非常快(每次响应5ms).但是,尽管写入套接字很快 - 读取套接字的响应总是慢得多.有线索吗?

module UriTester
  module UriInfo
    class << self
      def send_receive(socket, xml)
#        socket = TCPSocket.open("service.server.com","2316")
        begin
        start = Time.now
          socket.print(xml)           # Send request
        puts "just printed the xml into socket #{Time.now - start}"
        rescue Errno::ECONNRESET
        puts "looks like there is an issue!!!"
          socket = TCPSocket.open("service.server.com","2316")
          socket.print(xml)           # Send request
        end
        response=""
        while (line =socket.recv(1024))
          response += line
          break unless line.grep(/<\/bcap>/).empty?
        end
        puts "SEND_RECEIVE COMPLETED. IN #{Time.now - start}"
#        socket.close
        response
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

谢谢!

optimization network-programming tcp ruby-on-rails

0
推荐指数
1
解决办法
1896
查看次数

除非首先声明time_t,否则程序在使用struct tm时会崩溃

我试图阻止重建轮子.我正在解析一个时间作为其中一个值的输入文件.我需要一个数据结构来保存输入文件的所有值,而不是为时间字段创建自定义结构,我只想使用来自ctime的struct tm.

我遇到了一个奇怪的错误,所以希望你们中的一个可以帮助我.这是我的测试代码(用于我的概念证明):

#include <ctime>
#include <cstdio>

int main()
{

int Oldhour = 16;
int OldSecond = 25;
int OldMinute = 20;

time_t seconds;

struct tm * timeinfo;

timeinfo->tm_hour = Oldhour;
timeinfo->tm_min = OldMinute;
timeinfo->tm_sec = OldSecond;


int hour, min, sec;

hour = timeinfo->tm_hour;
min = timeinfo->tm_min;
sec = timeinfo->tm_sec;

printf("%d:%d:%d", hour, min, sec);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这编译得很好,它完全符合我的要求并打印"16:20:25",因此它以我想要的方式存储信息.但是,如果我删除行"time_t seconds;" 它立刻崩溃了.

c c++

0
推荐指数
1
解决办法
903
查看次数