Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Inter Process Communication Trên windows / Linux

    Tạo ra 2 quá trình P1 và P0 :

    - P0 : Đọc từ file nhiều dãy số nguyên liên tiếp(mỗi dãy có thể có số phần tử khác nhau) sau đó tiến trình P0 lần lượt gửi các dãy này cho P1.

    - P1 : Thực hiện sắp xếp các dãy theo thứ tự tăng dần,đồng thời tính tổng của dãy đó rồi gửi kết quả và tổng tương ứng của mỗi dãy về P0. Lúc này P0 thực hiện ghi kết quả lại vào file sao cho : dãy có tổng bé nhất được ghi đầu tiên,dãy có tổng lớn hơn được ghi sau.
    dùng vùng nhớ chia sẻ để giao tiếp.

    Đề bài nó như thế.E tìm hiểu mãi mà vẫn k hiểu và k làm được.Hình như phải làm trên LINUX nhưng lại không dược học thế mà thầy lại bắt làm bài điều kiện [IMG]images/smilies/Cry.gif[/IMG]
    Anh chị nào biết giúp e được không ạ.Có thể nói rõ về cách thức để xây dựng cái này không ạ.Và ta có thể chạy trên HDH Window được không ạ.Mà e mới chỉ học C,C++,Java,C# thui.Có thể áp dụng ngôn ngữ nào được để giải quyết nó k ạ.Thanks nhiều! Mong giúp đỡ

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Linux và Windows đều làm được như nhau. Nếu trên windows thì bạn nên dùng c++, nghiên cứu hàm Create/OpenFileMapping, MapViewOfFile để share memory. Dùng hàm Create/OpenEvent, SetEvent, WaitForSingleObject để dừng chờ đồng bộ hóa.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đây là code tạo 1 quá trình đọc dãy số từ file 1 giờ làm sao mà giao tiếp đuọc với tiến trình 2 sử dụng sharememory được??Mong mọi người giúp đỡ.có tài liệu hay code tham khảo về vấn đề này thì share e tham khảo với
    Mã:
    int _tmain(int argc, _TCHAR* argv[])
    {
     HANDLE hFile;
     HANDLE hAppend;
     DWORD dwBytesRead, dwBytesWritten, dwPos;
     char buff[4096];
     TCHAR path[] = _T("C:\\Documents and Settings\\Administrator\\Desktop\\ONE.txt" );
     // Mở file one.txt đã có sẵn
     hFile = CreateFile(path, // open ONE.TXT
     GENERIC_READ, // open for reading
     0, // do not share
     NULL, // no security
     OPEN_EXISTING, // existing file only
     FILE_ATTRIBUTE_NORMAL, // normal file
     NULL); // no attr. template
     
     //kiểm tra kết quả
     if (hFile == INVALID_HANDLE_VALUE) {
     printf("Could not open ONE."); // process error
     }
    code này chạy trên VC++ 2005.Mong giúp đỡ

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trên linux thì đọc tài liệu mấy hàm shmget(), shmat(), shmctl() ...là làm được rồi. Share memory process rất đơn giản chỉ là việc khai báo với HDH 1 vùng nhớ chung mà các process có thể thao tác lên đó.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
    lpMapAddress = MapViewOfFile(hMapFile, // handle to mapping object
    lpMapAddress chính là con trỏ trỏ tới vùng nhớ chứa nội dung file one.txt đó [IMG]images/smilies/smile.png[/IMG].

    Thân,

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thanks ạ.Nhưng mình đag làm trên windows.Cách để làm bài này ntn ạ?Mình không được học C4W.Đây là bài tập trong môn HĐH thầy bảo làm nên không hiểu rõ lắm.Trên LINUX lại càng mù tịt.Lên MSDN đọc mãi vẫn mơ hồ lắm ai có thể gợi ý được cách làm không.Khi mà tạo được memory chung rồi làm sao đáp ứng được như đề bài yêu cầu.thanks

    Tiến trình Po

    Mã:
    int main(int argc, char *argv[]) { HANDLE hFile, hMapFile; LPVOID mapAddress; // first create/open the file hFile = CreateFile(L"C:\\Documents and Settings\\Administrator\\Desktop\\ONE.TXT", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { fprintf(stderr,"Could not open file temp.txt (%d).
    ",GetLastError()); return -1; } // now obtain a mapping for it hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, _TEXT("SharedObject")); if (hMapFile == NULL) { fprintf(stderr,"Could not create mapping (%d).
    ", GetLastError());_getch();return -1; } // now establish a mapped viewing of the file mapAddress = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0); if(mapAddress == NULL) { printf("Could not map view of file (%d).
    ", GetLastError()); _getch();return -1; } // write to shared memory  getch();while (1); // remove the file mapping UnmapViewOfFile(mapAddress);getch();// close all handles CloseHandle(hMapFile); CloseHandle(hFile); }
    Làm sao để cho P1 lấy được nội dung trong P0.Giúp ná
    Đây là P1 khi mà P0 đã sharememory

    Mã:
    int _tmain(int argc, char *argv[]) { HANDLE hAppend; DWORD dwBytesRead, dwBytesWritten, dwPos; char buff[4096]; HANDLE hMapFile; LPVOID lpMapAddress; hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // read/write permission FALSE, // Do not inherit the name TEXT("SharedObject")); // of the mapping object. if (hMapFile == NULL) { printf("Could not open file mapping object1 (%d).
    ", GetLastError());_getch();return -1; } lpMapAddress = MapViewOfFile(hMapFile, // handle to mapping object FILE_MAP_ALL_ACCESS, // read/write permission 0, // max. object size 0, // size of hFile 0); // map entire file if (lpMapAddress == NULL) { printf("Could not map view of file1 (%d).
    ", GetLastError());_getch();return -1; }TCHAR path2[] = _T("C:\\Documents and Settings\\Administrator\\Desktop\\TWO.TXT" ); hAppend = CreateFile(path2, // open TWO.TXT GENERIC_WRITE, // open for writing 0, // do not share NULL, // no security OPEN_ALWAYS, // open or create FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no attr. template //kiểm tra kết quả if (hAppend == INVALID_HANDLE_VALUE) { printf("Could not open TWO."); // process error } getch(); //làm sao Đọc nội dung file one.txt rồi ghi vào cuối file two.txt  UnmapViewOfFile(lpMapAddress); CloseHandle(hMapFile); }
    Có ai biết giúp với

  7. #7
    Ngày tham gia
    Sep 2015
    Đang ở
    Hà Nội
    Bài viết
    0
    thế làm trong linux thì đọc file .txt ghi vào memory htif ntn ạ?ai hướng dẫn mình được không

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cái này phải tạo đa tiểu trình dùng hàm createthread() mỗi thread làm một nhiệm vụ riêng biệt

  9. #9
    share các chuỗi với nhau thì dễ, nhưng khi share các số với nhau thì thế nào vậy nhỉ ?

    làm mãi source này mà ko được

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •