-
02-04-2010, 10:11 AM #1Junior Member
- 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 đỡView more random threads:
- In số nguyên tố mỗi hàng 10 số
- Lấy tên user trên window bằng VC++!
- [HELP] Cách hiển thị số 128bit ra màn hình và nhập vào thanh ghi ???
- MFC: How to control CFileDialog item to make vietnamese - save dialog
- đóng gói phần mềm hoàn chỉnh .
- vấn đề operator và thứ tự ưu tiên trên C++
- Access is denied khi sử dụng OpenProcess?
- Sử Dụng Hàm SetTimer trong Static Thread ???
- Xem các hàm export qua DLL
- Cách xử lý thao tác nhập số HEX và lấy nó vào biến?
-
02-04-2010, 05:39 PM #2Silver member
- 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.
-
07-04-2010, 09:33 AM #3Junior Member
- 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 }
-
07-04-2010, 01:33 PM #4Junior Member
- 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 đó.
-
07-04-2010, 05:21 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mã:lpMapAddress = MapViewOfFile(hMapFile, // handle to mapping object
Thân,
-
07-04-2010, 06:32 PM #6Junior Member
- 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); }
Đâ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); }
-
16-04-2010, 04:56 PM #7Junior Member
- 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
-
14-07-2010, 11:23 AM #8Junior Member
- 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
-
01-03-2011, 08:28 AM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ