디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

요고시 Ada OOP 코드입니다.

나르시갤로그로 이동합니다. 2025.07.22 23:51:18
조회 54 추천 1 댓글 0

c 바인딩을 만들고 있어요.

Cada.File 패키지를 만들고

Cada.File.Object 객체를 만들었어요.

파일 작업할 때 편하게 하기 좋죠.

sys_stat_h 같은 파일들은 gcc가 자동으로 dump 한 파일이에요.

-fdump-ada-spec 옵주면 .ads 파일 자동 생성합니다.

그 파일들만으로도 저수준 c 바인딩이 가능해요.

Cada에서는 그걸 감싸서 dlopen, dlsym 등 및 file 작업 등을 OOP로 제공하죠

ㅋㅋ

역시 Ada 좋네요 ㅎㅎ



package body Cada.File is
  use type Interfaces.C.Int;
  use type Interfaces.C.long;

  function c_open2 (path  : Interfaces.C.Char_Array;
                    flags : Interfaces.C.Int) return File_Descriptor;
  function c_open3 (path  : Interfaces.C.Char_Array;
                    flags : Interfaces.C.Int;
                    mode  : sys_types_h.mode_t) return File_Descriptor;
  pragma import (c, c_open2, "open");
  pragma import (c, c_open3, "open");

  function open (path  : String;
                 flags : File_Flags) return Object is
    new_fd : constant File_Descriptor :=
      c_open2 (Interfaces.C.to_c (path), Interfaces.C.Int (flags));
  begin
    if new_fd = -1 then
      declare
        error_code : constant Interfaces.C.int := Cada.Error.get_errno;
        error_msg  : constant String           :=
          "open(2) failed for path """ & path & """ (errno: " & error_code'image & ")";
      begin
        case error_code is
          when errno_h.EACCES =>
            raise Cada.Error.Permission_Denied with error_msg;
          when errno_h.ENOENT =>
            raise Cada.Error.No_Such_File_Or_Directory with error_msg;
          when errno_h.EEXIST =>
            raise Cada.Error.File_Exists with error_msg;
          when errno_h.EISDIR =>
            raise Cada.Error.Is_A_Directory with error_msg;
          when errno_h.ENOTDIR =>
            raise Cada.Error.Not_A_Directory with error_msg;
          when others =>
            declare
              errno_text : constant String := Cada.Error.get_error_message(error_code);
            begin
              raise Cada.Error.Unknown_Error with errno_text & ": " & error_msg;
            end;
        end case;
      end;
    end if;
    return (Ada.Finalization.Controlled with fd => new_fd);
  end open;

  -- open implementation (3 arguments)
  function open (path  : String;
                 flags : File_Flags;
                 mode  : Cada.Types.File_Mode) return Object is
    new_fd : constant File_Descriptor := c_open3 (Interfaces.C.to_c (path),
                                                  Interfaces.C.Int (flags),
                                                  sys_types_h.mode_t (mode));
  begin
    if new_fd = -1 then
      declare
        error_code : constant Interfaces.C.int := Cada.Error.get_errno;
        error_msg  : constant String           :=
          "open(2) failed for path """ & path & """ (errno: " & error_code'image & ")";
      begin
        case error_code is
          when errno_h.EACCES =>
            raise Cada.Error.Permission_Denied with error_msg;
          when errno_h.ENOENT =>
            raise Cada.Error.No_Such_File_Or_Directory with error_msg;
          when errno_h.EEXIST =>
            raise Cada.Error.File_Exists with error_msg;
          when errno_h.EISDIR =>
            raise Cada.Error.Is_A_Directory with error_msg;
          when errno_h.ENOTDIR =>
            raise Cada.Error.Not_A_Directory with error_msg;
          when others =>
            declare
              errno_text : constant String := Cada.Error.get_error_message(error_code);
            begin
              raise Cada.Error.Unknown_Error with errno_text & ": " & error_msg;
            end;
        end case;
      end;
    end if;
    return (Ada.Finalization.Controlled with fd => new_fd);
  end open;

추천 비추천

1

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 반응이 재밌어서 자꾸만 놀리고 싶은 리액션 좋은 스타는? 운영자 25/07/28 - -
2874724 프로그래밍 판에 지적허영심 있는 분들이 보임 [13] 프갤러(115.138) 07.26 135 1
2874720 누가 특이점이 온다고 했냐 [6] 프갤러(115.138) 07.26 177 0
2874717 민생지원금 안뿌려도 어차피 물가는 오름 [7] 야옹아저씨갤로그로 이동합니다. 07.26 162 6
2874716 해외 계약직도 경력에 도움됨? [4] ㅇㅇ(49.166) 07.26 60 0
2874713 요즘 유튜브에 무한도전 가끔 뜨는데 아스카영원히사랑해갤로그로 이동합니다. 07.26 46 0
2874709 음기 충전 발명도둑잡기(118.216) 07.26 68 0
2874708 민생지원금 사용기준 더 제한햇어야함 [9] 야옹아저씨갤로그로 이동합니다. 07.26 160 5
2874701 냥덩이 [1] 발명도둑잡기(118.216) 07.26 47 0
2874698 프로그래머스 부트캠프 가는데 전여친있는데 ㅈ됀거냐 [1] 프갤러(118.36) 07.26 62 0
2874697 난 박보영하고 결혼 안 한다 [1] 발명도둑잡기(118.216) 07.26 64 0
2874696 민생지원금 배민되던데 루도그담당(58.239) 07.26 75 0
2874695 베트남 놀러왔는데 추천 비추천이 안되네 [2] 프갤러(117.3) 07.26 40 0
2874693 서온-파도 발명도둑잡기(118.216) 07.26 22 0
2874692 민생지원금으로 배달 시켜먹었습니다~ [9] 루도그담당(58.239) 07.26 93 0
2874691 새 정부에서 날 잡아간단다... 국힘 해체쇼가 문제란다 [1] 발명도둑잡기(118.216) 07.26 74 0
2874688 ㅆㅇㅆ 는 그누보드 코드보면 정신나가겠네 [2] 피치(183.101) 07.26 64 0
2874687 형들 리액트 독학해서 사이트 하나 만들어봤는데 UI 디자인 한번 봐줘 [7] 프갤러(221.161) 07.26 75 0
2874684 김영한씨 빡고수지 문제는 김영한씨 책을 아직도 참조하는게 문제인거지 [3] ㅆㅇㅆ(124.216) 07.26 200 0
2874682 낭만 그잡채자냥❤ [1] 어린이노무현갤로그로 이동합니다. 07.26 57 0
2874679 냥덩이랑 친해지는법❤+ ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.26 31 0
2874678 김x한님 별로야? [1] 피치(183.101) 07.26 63 0
2874677 검신 오공이랑 세키로 같은거 무브먼트 영상보면서 [2] 루도그담당(58.239) 07.26 53 0
2874676 밤 12시 이후로 깨았눈거 정말 오랜만인둣? ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.26 39 0
2874675 도태 에겐코더들이 싸놓은 코드보면 한숨만 나온다 [2] 프갤러(220.87) 07.26 56 0
2874674 얼마전 리조트 총싸움 글 쓴 이틀 뒤 인천 총기 사건 남 발명도둑잡기(118.216) 07.26 35 0
2874673 유니티 최대 난제 부딪힘 [15] 루도그담당(58.239) 07.26 116 0
2874672 ㄹㅇ 프리랜서 뛰면서 경력에 대한 환상이 깨짐 [3] ㅆㅇㅆ(124.216) 07.26 84 0
2874671 그냥 남의 코드 덜렁 던져주고 고쳐달란 새끼한테도 화가나고 [4] ㅆㅇㅆ(124.216) 07.26 62 0
2874670 뷰 응답 객체는 일반적으로 DTO임 [1] ㅆㅇㅆ(124.216) 07.26 58 0
2874669 개씹웃기넹 ㅋㅋㅋㅋㅋㅋ ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.25 38 0
2874668 가끔 신기하긴해. 요구 스펙들은 무슨 난다 긴다하는 새끼들인데 [3] ㅆㅇㅆ(124.216) 07.25 58 0
2874666 젤 이해가 안가는게 왜 틀딱들은 자기 지식을 최신화 안하냐 ㅆㅇㅆ(124.216) 07.25 162 0
2874663 내가 느끼는게 회사 요구스펙이랑 하는 일이 너무 동떨어진듯 [7] ㅆㅇㅆ(124.216) 07.25 74 0
2874660 Ai로 진짜 기술격차 안드로메다 됨? [1] 프갤러(118.235) 07.25 55 0
2874658 확실히 애바가 우울증 치료효과가 있네 - 레딧 글 ㅇㅇ(183.101) 07.25 42 0
2874657 지금도 송지훈형 모델그대로네요예 신비한티비서프라이즈(121.147) 07.25 41 0
2874656 유니티 씨발련아 [4] 루도그담당(58.239) 07.25 60 0
2874655 민생지원금으로 주식을 어떻게 산다는 거죠? [1] 발명도둑잡기(118.216) 07.25 40 0
2874654 수리할 권리를 투쟁으로 쟁취해야 한다 발명도둑잡기(118.216) 07.25 25 0
2874652 슬줌마 슬카스 [12] ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.25 82 0
2874651 끙야대신 뿡야만.. 힘둘당.. [1] ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.25 41 0
2874650 확실히 질 좋은 수면을 위해서는 카페인 끊고 술마시면 안됨 [4] ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.25 51 0
2874649 4시간 넘게 잔변느낌으로 괴롭당.. ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.25 38 0
2874647 뭔가 이상해 [7] 개멍청한유라갤로그로 이동합니다. 07.25 74 0
2874645 재명지원금으로 주식이나 더 사야겟다 [2] 헬마스터갤로그로 이동합니다. 07.25 56 0
2874644 재명지원금이라고 할인에 먹을거 더 퍼주는데 [1] 헬마스터갤로그로 이동합니다. 07.25 45 0
2874638 옛날에 skt 직원한태 5g교육받은적 있었는데 [2] 밀우갤로그로 이동합니다. 07.25 57 0
2874636 냥덩 만화상 이 만화가 대단하당⭐ 13회 수상작 [1] ♥팬티스타킹냥덩♥갤로그로 이동합니다. 07.25 42 0
2874635 프랑스, 9월 팔레스타인 국가 승인 발명도둑잡기(118.216) 07.25 25 0
2874634 ide는 다 웹으로 가겠네 [4] 뉴진파갤로그로 이동합니다. 07.25 79 0
뉴스 미스맥심 바비앙, 80년대 에어로빅 콘셉트 화보 공개 디시트렌드 07.27
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2