Advertisement
pizzaboy192

Child process 1

Oct 17th, 2012
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. /* #include <cstdlib> */
  2. #include <iostream>
  3. #include <cerrno>
  4. #include <limits>
  5. #include <sys/types.h>
  6. #include <sys/wait.h>
  7. #include <sys/ipc.h>
  8. #include <sys/msg.h>
  9. #include <unistd.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. using namespace std;
  14.  
  15. #define BUFSIZ 512
  16.  
  17. struct my_msg_st {
  18. long int my_msg_type;
  19. char some_text[BUFSIZ];
  20. };
  21.  
  22.  
  23. int main(int argc, char** argv)
  24. {
  25.  
  26. int running = 1;
  27. int msgid;
  28. struct my_msg_st some_data;
  29. long int msg_to_receive = 5;
  30.  
  31. /* Set up the message queue */
  32. msgid = msgget((key_t) 1234, 0666 | IPC_CREAT);
  33.  
  34. if (msgid == -1) {
  35. cout << "msgget failed" << endl;
  36. exit(EXIT_FAILURE);
  37. }
  38.  
  39. /* Retrieve messages from the queue until an "end" is encountered. */
  40. while (running) {
  41. // if (msgrcv(msgid, (void *)&some_data, BUFSIZ,
  42. // msg_to_receive, 0) == -1) {
  43. // cout << "msgrev failed" << endl;
  44. //exit(EXIT_FAILURE);
  45. //}
  46.  
  47. // char *args[] = {"/bin/ls", "-1", "/tmp/cs261*"};
  48. char *args[] = {"/bin/ls"};
  49. execvp("/bin/ls", args);
  50. cout << some_data.some_text;
  51.  
  52.  
  53. if (strncmp(some_data.some_text, "end", 3) == 0) {
  54. running = 0;
  55. }
  56. sleep(1);
  57. }
  58.  
  59. if (msgctl(msgid, IPC_RMID, 0) == -1) {
  60. cout << "msgctl(IPC_RMID) failed" << endl;
  61. exit(EXIT_FAILURE);
  62. }
  63.  
  64. exit(EXIT_SUCCESS);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement