디시인사이드 갤러리

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

갤러리 본문 영역

요고시 Ada OOP 코드입니다.

나르시갤로그로 이동합니다. 2025.07.22 23:51:18
조회 58 추천 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/08/04 - -
공지 프로그래밍 갤러리 이용 안내 [92] 운영자 20.09.28 46071 65
2878553 장대호도 일베충이여서 숙청당한거임?? 뒷통수한방(1.213) 23:44 1 0
2878552 일베충들 왜 욕먹는거임 커뮤니티가 그렇개 많은데 뒷통수한방(1.213) 23:44 2 0
2878551 면목이 없으나 어쩔수없는 일이예요. 프갤러(220.84) 23:41 1 0
2878550 클리앙 vs okky 어디가 더 강하냐?? 프갤러(1.213) 23:32 10 0
2878549 내가 잘 모르는 분야 발명도둑잡기갤로그로 이동합니다. 23:25 9 0
2878548 나는 프로그래밍에 재능없단 생각 항상 한다 [5] ㅆㅇㅆ(124.216) 23:17 36 0
2878547 간첩 [1] 발명도둑잡기갤로그로 이동합니다. 23:14 19 0
2878546 방금 인스타그램 추천에 방검폭 테스트 떴다 발명도둑잡기갤로그로 이동합니다. 23:12 8 0
2878545 오늘 더불어민주당 정청래 대표께서 진보당을 방문해주셨습니다 발명도둑잡기갤로그로 이동합니다. 23:06 9 0
2878544 <좀비 딸>이 히트했대서 생각나는 예전 글 발명도둑잡기갤로그로 이동합니다. 22:58 17 0
2878543 xx우가 호의를 베풀면 안됐습니다. [1] 프갤러(220.84) 22:50 22 0
2878542 정보통신과 대중심리 [1] 발명도둑잡기갤로그로 이동합니다. 22:47 23 0
2878537 나의 운명은 좇같은 인간새끼들 심판을 위해서 태어남 [5] 타이밍뒷통수한방(1.213) 22:28 31 0
2878536 네 소원이 무엇이냐고 하나님이 물으신다면 [16] ♥꽃보다냥덩♥갤로그로 이동합니다. 22:21 56 0
2878535 나님은 너희가 인생이란 숲속 길을 잃지 않게 도와주는 나침반이양⭐+ [12] ♥꽃보다냥덩♥갤로그로 이동합니다. 22:11 40 0
2878533 주변 사람들이 늙어가는게 눈에 보여 넘 슬프당.. [3] ♥꽃보다냥덩♥갤로그로 이동합니다. 22:08 35 0
2878532 중국산 칠판 발명도둑잡기갤로그로 이동합니다. 22:07 13 0
2878531 한남들 숨결이 피부에 닿을때 [4] 개멍청한유라갤로그로 이동합니다. 22:05 31 0
2878530 절 스토킹하는 악귀 군단이 붙은 건가요. 프갤러(220.84) 22:04 14 0
2878528 방금 집에왔어요 [3] 루도그담당(58.239) 22:00 34 0
2878527 좆기로 갈 생각 마라 [4] 밀우갤로그로 이동합니다. 21:56 44 0
2878526 영혼에 비수가 꽂혀 삶이 거꾸로갑니다 [1] 프갤러(220.84) 21:54 17 0
2878525 국비 it [3] 프갤러(220.86) 21:52 40 0
2878524 내 인생은 왜 이리 힘든가요 [5] 개멍청한유라갤로그로 이동합니다. 21:49 36 0
2878523 PL이 업무 이것도 모르냐는데 [4] 개멍청한유라갤로그로 이동합니다. 21:46 39 0
2878522 나는 무엇도 쟁취하지 못합니다. [1] 프갤러(220.84) 21:42 20 0
2878517 너무 배부르다 [3] 개멍청한유라갤로그로 이동합니다. 21:33 28 0
2878516 MSSQL은 마소 생태계라는 관점에서 봐야지 ㅆㅇㅆ(124.216) 21:26 27 0
2878515 나님 쉬야하구 쿨쿨⭐+ [1] ♥꽃보다냥덩♥갤로그로 이동합니다. 21:25 20 0
2878514 원종이는 감옥생활조차 서정적일듯.. [1] ♥꽃보다냥덩♥갤로그로 이동합니다. 21:24 36 0
2878513 한화시스템 부캠 어떰? 프갤러(183.102) 21:24 18 0
2878512 mssql는 진짜 개구린거같은데 [16] 밀우갤로그로 이동합니다. 21:15 75 0
2878511 내가 느끼는게 이제 내가 코드짜는거 의미가 없다 [2] ㅆㅇㅆ찡갤로그로 이동합니다. 21:12 34 0
2878510 가난이 밉다... 영화 싸게 봐보겠다고 할인쿠폰이나 찾아다니는 인생이.. [1] ㅇㅇ(223.39) 21:11 18 0
2878508 얄코 js 강의 어때? [1] 프갤러(121.176) 21:08 22 0
2878507 커서는 업데이트 할때마다 좆병신같은 버그 하나씩 생기네 프갤러(59.6) 21:03 11 0
2878506 llm으로 레퍼런스적은 프레임워크 쓰면 밀우갤로그로 이동합니다. 20:52 19 0
2878505 나는 애새끼입니다. 억지도 부리고 어리광도 부려요. 프갤러(220.84) 20:48 15 0
2878503 자바 독학은 자바의 정석 보면되노? [1] 프갤러(223.39) 20:45 38 0
2878501 삶에 즐거운 구간이 없었군요. 프갤러(220.84) 20:42 44 0
2878500 나님 주무시기전 소통⭐+ 질문 받음 [3] ♥꽃보다냥덩♥갤로그로 이동합니다. 20:41 32 0
2878497 llm은 딱 학부2학년수준이 한계인듯 [2] 공기역학갤로그로 이동합니다. 20:24 37 0
2878496 나님 왤케 낭만적일깡? [1] ♥꽃보다냥덩♥갤로그로 이동합니다. 20:20 23 0
2878495 나의 킬스위치를 누르시오. 프갤러(220.84) 20:11 18 0
2878494 Perl 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 20:09 25 0
2878491 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥꽃보다냥덩♥갤로그로 이동합니다. 19:47 21 0
2878490 ㅇㅇ 프갤러(211.235) 19:45 15 0
2878489 꼰대의 우분투 일침 발명도둑잡기갤로그로 이동합니다. 19:44 39 0
2878487 호흡을, 식생활을 못하겠어요. 프갤러(220.84) 19:38 49 0
뉴스 웨이브투어스, 美 최대 음악 축제 '롤라팔루자' 무대 성료…열광적 분위기 '눈길' 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2