Announcement

Collapse
No announcement yet.

Liên lạc bằng cơ chế pipe

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] Liên lạc bằng cơ chế pipe

    Tình hình là em đang làm bài tập lớn hdh hihihehe_nhoc2_85.gif, nhưng khi tìm hiểu về cơ chế liên lạc bằng pipe này thì đa số đều trên Linux, còn trong MSDN thì là về liên lạc giữa 2 process (server & client) hihihehe_nhoc2_62.gif. Vậy các bác cho e hỏi là hihihehe_nhoc2_63.gif:
    _ code trên Linux với trên Windows có khác nhau k ( tài liều bên Bk cũng toàn trên Linux- còn trường mình thì chỉ giảng sơ qua lí thuyết nên e k biết code thế nào )
    _ trong 1 chương trình có 2 tiểu trình thì liên lạc giữa 2 tiểu trình (thread) đó = pipe ntn ( vì trên mạng toàn thấy process thui hihihehe_nhoc2_07.gif)
    Cho em xin code minh họa luôn nhé
    Thanks so much!!! hihihehe_nhoc2_46.gif
    Last edited by 10520253; 07-12-2011, 00:39.

  • #2
    Windows không có pipe mà nó xài từ bus - message bus, search thử xem.

    Còn thread thì nó xài chung vùng nhớ của process mà liên lạc chứ nó cần gì pipe nữa nên người ta không đề cập.

    Comment


    • #3
      Còn cái liên lạc bằng shared memory thì sao anh..... e hok hiểu rõ mấy cái này lắm. Cơ chế của nó là gì ấy....
      Tôi đã chọn và tôi sẽ đi bằng mọi cách.

      Comment


      • #4
        Shared memory là chia sẽ chung 1 vùng nhớ ...

        Đầu tiên thì cần 1 Process tạo ra vùng nhớ chia sẽ đó sử dụng hàm dưới

        Code:
        HANDLE WINAPI CreateFileMapping(
          __in          HANDLE hFile,
          __in          LPSECURITY_ATTRIBUTES lpAttributes,
          __in          DWORD flProtect,
          __in          DWORD dwMaximumSizeHigh,
          __in          DWORD dwMaximumSizeLow,
          __in          LPCTSTR lpName
        Sau đó ta phải tạo 1 con trỏ View tới vùng nhớ đã tạo ở trên. Con trỏ này dùng để đọc hay ghi vào vùng nhớ đó
        Code:
        LPVOID WINAPI MapViewOfFile(
          __in          HANDLE hFileMappingObject,
          __in          DWORD dwDesiredAccess,
          __in          DWORD dwFileOffsetHigh,
          __in          DWORD dwFileOffsetLow,
          __in          SIZE_T dwNumberOfBytesToMap
        );
        Sau đó dùng hàm CopyMemory(...) để ghi vào hay đọc từ vùng nhớ đó ...

        Tiếp theo là tiến trình thứ 2 đọc từ cái vùng nhớ đã dc tạo ra ở trên .. cấu trúc cũng tương tự...
        nhưng khác là sử dụng hàm OpenFileMapping thay vì CreateFileMapping như ở trên

        Comment


        • #5
          Originally posted by 07520004 View Post
          Windows không có pipe mà nó xài từ bus - message bus, search thử xem.

          Còn thread thì nó xài chung vùng nhớ của process mà liên lạc chứ nó cần gì pipe nữa nên người ta không đề cập.
          nhưng đề chính xác là:
          Viết chương trình gồm 2 tiến trình. Tiến trình A đọc 1 dãy số từ 1 file, sau đó gửi dãy số nguyên này cho tiến trình B thông qua cơ chế pipe. Tiến trình B nhận xong dữ liệu ....
          _ có thể là viết 2 chương trình liên lạc với nhau kiểu Server client.
          Windows không có pipe mà nó xài từ bus - message bus, search thử xem.
          _ Ý em là lập trình C++ trong môi trường Windows với môi trường Linux/UNIX có khác gì k (vì em thấy trong mấy tài liệu có 1 số câu lệnh thực hiện trong 2 môi trường khác nhau là không giống nhau- không biết có phải k nữa ~~' ).

          Comment


          • #6
            Originally posted by 10520253 View Post
            _ Ý em là lập trình C++ trong môi trường Windows với môi trường Linux/UNIX có khác gì k (vì em thấy trong mấy tài liệu có 1 số câu lệnh thực hiện trong 2 môi trường khác nhau là không giống nhau- không biết có phải k nữa ~~' ).
            Các hàm chuẩn của C++ được định nghĩa trong chuẩn C-0x thì như nhau, các thức còn lại là khác. Và giao tiếp giữa các process chắc chắn là phải khác.

            Comment


            • #7
              Originally posted by 10520253 View Post
              Tình hình là em đang làm bài tập lớn hdh [ATTACH=CONFIG]1731[/ATTACH], nhưng khi tìm hiểu về cơ chế liên lạc bằng pipe này thì đa số đều trên Linux, còn trong MSDN thì là về liên lạc giữa 2 process (server & client) [ATTACH=CONFIG]1732[/ATTACH]. Vậy các bác cho e hỏi là [ATTACH=CONFIG]1733[/ATTACH]:
              _ code trên Linux với trên Windows có khác nhau k ( tài liều bên Bk cũng toàn trên Linux- còn trường mình thì chỉ giảng sơ qua lí thuyết nên e k biết code thế nào )
              _ trong 1 chương trình có 2 tiểu trình thì liên lạc giữa 2 tiểu trình (thread) đó = pipe ntn ( vì trên mạng toàn thấy process thui [ATTACH=CONFIG]1734[/ATTACH])
              Cho em xin code minh họa luôn nhé
              Thanks so much!!! [ATTACH=CONFIG]1737[/ATTACH]
              Tham khảo trong đây nè bạn:

              Comment


              • #8
                Originally posted by 10520455 View Post
                cho mình hỏi các bạn dùng tài liệu nào mà có nhiều hàm khủng thế , nếu học bt trên lớp chắc chắc k có, share cho mình tài liệu với

                Comment


                • #9
                  OK có rồi trên MSDN quá trời mà mình k biết

                  Comment

                  LHQC

                  Collapse
                  Working...
                  X