>

localtime 를 노출하려는 시도에서 뭔가 잘못하고있는 것 같습니다  Perl 6의 기능 :

use NativeCall;
my class TimeStruct is repr<CStruct> {
    has int32 $!tm_sec;
    has int32 $!tm_min;
    has int32 $!tm_hour;
    has int32 $!tm_mday;
    has int32 $!tm_mon;
    has int32 $!tm_year;
    has int32 $!tm_wday;
    has int32 $!tm_yday;
    has int32 $!tm_isdst;
    has Str   $!tm_zone;
    has long  $!tm_gmtoff;
}
sub localtime(uint32 $epoch --> TimeStruct) is native {*}
dd localtime(time);  # segfault

perl6-lldb-m 에서 달리기 , 나는 얻는다 :

Process 82758 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x5ae5dda1)
    frame #0: 0x00007fffe852efb4 libsystem_c.dylib`_st_localsub + 13
libsystem_c.dylib`_st_localsub:
->  0x7fffe852efb4 <+13>: movq   (%rdi), %rax
    0x7fffe852efb7 <+16>: movq   %rax, -0x20(%rbp)
    0x7fffe852efbb <+20>: movq   0x8e71d3e(%rip), %rbx     ; lclptr
    0x7fffe852efc2 <+27>: testq  %rbx, %rbx
Target 0: (moar) stopped.

여기서 내가 잘못하고있는 것은 무엇입니까?

업데이트 : 최종 작업 솔루션 :

class TimeStruct is repr<CStruct> {
    has int32 $.tm_sec;    # *must* be public attributes
    has int32 $.tm_min;
    has int32 $.tm_hour;
    has int32 $.tm_mday;
    has int32 $.tm_mon;
    has int32 $.tm_year;
    has int32 $.tm_wday;
    has int32 $.tm_yday;
    has int32 $.tm_isdst;
    has long  $.tm_gmtoff; # these two were
    has Str   $.time_zone; # in the wrong order
}
sub localtime(int64 $epoch is rw --> TimeStruct) is native {*}
my int64 $epoch = time;  # needs a separate definition somehow
dd localtime($epoch);


  • 답변 # 1

    localtime()   time_t* 유형의 포인터를 예상합니다.  논쟁으로. time_t 가정  그리고 uint32_t  특정 플랫폼에서 호환되는 유형입니다.

    sub localtime(uint32 $epoch is rw --> TimeStruct) is native {*}
    my uint32 $t = time;
    dd localtime($t);
    
    

    해야합니다 (속성을 공개하지 않으면 아무것도 볼 수 없지만).

    난 당신의 time_t 에 조금 놀랐습니다  64 비트 유형이 아니며 apple time.h 를 googled했습니다. 또한 구조체 선언의 마지막 두 속성이 잘못된 순서로되어 있다고 생각합니다.

  • 이전 regex - 파이썬 정규 표현식을 사용하여 텍스트에서 특정 patern 찾기
  • 다음 pine script - isdaily, isweekly와 비슷한 시간대를 어떻게 알 수 있습니까?