디시인사이드 갤러리

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

갤러리 본문 영역

요고시 Ada OOP 코드입니다.

나르시갤로그로 이동합니다. 2025.07.22 23:51:18
조회 56 추천 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 - -
AD 휴대폰 액세서리 세일 중임! 운영자 25/07/28 - -
2877098 오늘 해킹 공부하면서 구현한것 루도그담당(118.235) 08.01 48 0
2877097 주체를 무엇으로 설정하는지가 중요함 쉽고 간단하게 가는 방법 찾아야함 ♥찢명아티스트냥덩♥갤로그로 이동합니다. 08.01 24 0
2877096 나님 귀납적으로 원리 유추능력 ㄱㅆㅆㅅㅌㅊ!! ♥찢명아티스트냥덩♥갤로그로 이동합니다. 08.01 29 0
2877095 윤수괴 감방에서 팬티쇼햇다는구나 [1] 헬마스터갤로그로 이동합니다. 08.01 52 0
2877094 역시 데이터는 거짓말 안 함 ♥찢명아티스트냥덩♥갤로그로 이동합니다. 08.01 23 0
2877093 커피를 몇 잔씩 아이스 커피를 마시는지... 모르겠당. 넥도리아(220.74) 08.01 17 0
2877092 ts 쓸필요없네 [7] 헬마스터갤로그로 이동합니다. 08.01 77 0
2877090 잠을 이상한 자세로 자서 그런강 두통 있넹 ♥찢명아티스트냥덩♥갤로그로 이동합니다. 08.01 20 0
2877089 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥찢명아티스트냥덩♥갤로그로 이동합니다. 08.01 29 0
2877088 "트럼프, 美 소프트파워 스스로 무너뜨려" 발명도둑잡기(39.7) 08.01 26 0
2877087 냥덩이 돌대가리 새끼야 발명도둑잡기(39.7) 08.01 24 0
2877085 "어느 새부터 미국은 안 멋져" 발명도둑잡기(39.7) 08.01 24 0
2877082 바이브코딩? 이거대박이라 ㅇㅇ(218.48) 08.01 96 0
2877077 힙합 갤러리 피 뽑는다는 글 보니 드는 생각 발명도둑잡기(39.7) 08.01 18 0
2877076 성조태극기 부대 성조기 흔들며 미국 관세협상 만세 발명도둑잡기(39.7) 08.01 21 0
2877075 '제시 팬 폭행' 연루 코알라는 살인 전과자? '충격' 주장 발명도둑잡기(39.7) 08.01 22 0
2877074 남편 중요 부위 절단한 50대 범행에 가담 정황…사위 긴급체포 발명도둑잡기(39.7) 08.01 29 0
2877072 이재면씨 대통령 재밋는것같더라 [1] 헬마스터갤로그로 이동합니다. 08.01 59 0
2877068 말할 때 자기 자신을 나님이 어떠시다 말하는 사람 심리 [2] 발명도둑잡기(39.7) 08.01 37 0
2877065 돈이라도 많이 받으면 혼자 일 다 해도 아무말 안하지. [1] 프갤러(59.16) 08.01 41 0
2877064 데이트할 돈도 없고, 돈도 없고, 강연만 들으러 다닐 예정 [2] 넥도리아(220.74) 08.01 45 0
2877063 씨발 날씨 [5] 아스카영원히사랑해갤로그로 이동합니다. 08.01 69 0
2877062 어셈블리어 다루는 중 [5] 루도그담당(118.235) 08.01 75 0
2877061 내가 예전에 개발하던게 polygon nft 인데 [3] 어린이노무현갤로그로 이동합니다. 08.01 51 0
2877060 .env 도 보안에 안좋아서 이번에 aws kms랑 [1] 어린이노무현갤로그로 이동합니다. 08.01 55 0
2877058 외모가 후달려서 짝사랑만 해봐가지고 [4] ㅆㅇㅆ(124.216) 08.01 77 0
2877056 dart에서 생성자부분에 const 붙이는거 보고 프갤러(113.59) 08.01 43 0
2877055 슈뢰딩거의 변기 [2] 개멍청한유라갤로그로 이동합니다. 08.01 41 0
2877054 나도 썸인가 연애인가 해보고싶네 [7] ㅆㅇㅆ(124.216) 08.01 68 0
2877053 나도 큰 프로그램 만들고싶다 [5] ㅆㅇㅆ(124.216) 08.01 60 0
2877052 GDC가 const쓰더라 ㅋㅋㅋㅋㅋㅋ [4] 개멍청한유라갤로그로 이동합니다. 08.01 54 0
2877051 나 눈물날뻔했어 [9] 개멍청한유라갤로그로 이동합니다. 08.01 62 0
2877050 나도 집에서 일할줄아는데 ㅋ 개멍청한유라갤로그로 이동합니다. 08.01 32 0
2877049 인생뭐있나 배구공(119.202) 08.01 23 0
2877047 프로그래밍 하면서 느끼는데 컨벤션이랑 스타일 ㅆㅇㅆ(124.216) 08.01 47 0
2877046 또 해킹 공부 시작하겠습니다 루도그담당(118.235) 08.01 37 0
2877045 일명 참사라고 불리우는 사건들에 대해서 사람들은 정말로 공감이 되는거임? ㅇㅇ(223.39) 08.01 29 0
2877044 그래픽카드 수집가 발명도둑잡기(118.216) 08.01 20 0
2877043 그누보드 어질하네 [1] 프갤러(220.121) 08.01 40 0
2877042 짜다 [1] 배구공(119.202) 08.01 31 0
2877041 const로 도배하는게 최대의 가스라이팅 아니냐? [11] 헬마스터갤로그로 이동합니다. 08.01 80 0
2877039 이건 또 뭐냐 ㅋㅋㅋㅋ.....jpg [7] ㅇㅇ갤로그로 이동합니다. 08.01 63 0
2877037 ai보컬 [1] 배구공(119.202) 08.01 34 0
2877036 공공 SI 클라우드 네이티브 msa 적용 의무화 [1] ㅇㅇ(112.220) 08.01 39 0
2877035 드디어 목요일~~ 하루만 더 버티면 금요일~ [3] 가연아갤로그로 이동합니다. 08.01 37 0
2877034 근데 LLM 나만 함수,메서드 단위로 코드 생성하냐 ㅆㅇㅆ(124.216) 08.01 31 0
2877033 머구 알바 카르텔 진짜임 나도 당해봤다니까 [2] ㅆㅇㅆ(124.216) 08.01 43 0
2877032 대구 알바 카르텔 ㄹㅇ 인가보네 [1] 루도그담당(118.235) 08.01 54 0
2877030 2000 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08.01 24 0
2877029 방금 지피티한테 물어보고 느낀건데 지피티로는 코드 리뷰 못하겠더라 [2] ㅆㅇㅆ(124.216) 08.01 48 0
뉴스 '마이 유스' 송중기X천우희, 믿고 설레는 로맨스! 감성 온도 높인 대본 리딩 현장 공개 디시트렌드 08.01
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2