【问题标题】:how to define a char array in chicken scheme如何在鸡计划中定义一个字符数组
【发布时间】:2016-10-11 06:05:50
【问题描述】:

我正在寻找使用鸡肉方案的 http://www.tcpdump.org/pcap.html 示例,但在寻找将其翻译为使用 ffi 时被卡住了:

#include <stdio.h>
#include <pcap.h>

int main(int argc, char *argv[])
{
    char *dev, errbuf[PCAP_ERRBUF_SIZE];

    dev = pcap_lookupdev(errbuf);
    if (dev == NULL) {
        fprintf(stderr, "Couldn't find default device: %s\n", errbuf);
        return(2);
    }
    printf("Device: %s\n", dev);
    return(0);
}

具体来说,我希望定义一个变量errbuf[PCAP_ERRBUF_SIZE]并使用ffi接口调用pcap_lookupdev

任何指针将不胜感激。

【问题讨论】:

    标签: lisp chicken-scheme


    【解决方案1】:

    以下代码已针对 CHICKEN 5.2.0 开发并使用csc -L -lpcap pcap-test.scm 编译:

    (module pcap-test ()
    
    (import scheme)
    (import (chicken base))
    (import (chicken blob))
    (import (chicken foreign))
    (import (chicken format))
    
    #>
    #include <string.h>
    #include <pcap.h>
    <#
    
    (define stderr (current-error-port))
    
    (define pcap_lookupdev (foreign-lambda c-string "pcap_lookupdev" blob))
    (define strdup (foreign-lambda c-string* "strdup" blob))
    
    (define errbuf (make-blob (foreign-value "PCAP_ERRBUF_SIZE" int)))
    (define dev (pcap_lookupdev errbuf))
    
    (when (not dev)
      (fprintf stderr "Couldn't find default device: ~a\n" (strdup errbuf))
      (exit 2))
    
    (printf "Device: ~a\n" dev)
    (exit 0)
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      相关资源
      最近更新 更多