Advertisement
fr1sk

Untitled

Feb 27th, 2017
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. //program simulira fopen
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <stdbool.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9.  
  10. //kada define u vise redova razdvajamo sa "\"
  11.  
  12. #define osAssert(cond, msg) osErrorFatal(cond, msg, __FILE__, __LINE__)
  13.  
  14. void osErrorFatal(bool cond, const char *msg, int lineNum, const char *fname){
  15.     if(!cond){
  16.         perror(msg); //moja poruka: sistemska poruka
  17.         fprintf(stderr, "%s:%d\n", fname, lineNum);
  18.         exit(EXIT_FAILURE);
  19.     }
  20.   }
  21.  
  22. /*
  23. prima putanju do fajla
  24. path, r,w,a,r+,w+,a+
  25. */
  26. bool osOpenFile(const char *path, const char *access, int *fd){
  27.     static const mode_t mod = 0644; //koristise za OS programiranje, svi su integeri, to je u sustini typedefovan tip
  28.                                     // da uvek bude uptodate
  29.     int flags = 0;
  30.     if('r' == access[0]){
  31.         if('+'==access[1]){
  32.             flags |= O_RDWR;
  33.         } else {
  34.             flags |= O_RDONLY;
  35.         }
  36.     } else if('w' == access[0]){
  37.         flags |= O_CREAT;
  38.         flags |= O_TRUNC;
  39.         if('+'==access[1]){
  40.             flags |= O_RDWR;
  41.         } else {
  42.             flags |= O_WRONLY;
  43.         }
  44.     } else {    //flag - a
  45.         flags |= O_CREAT;
  46.         flags |= O_APPEND;
  47.         if('+'==access[1]){
  48.             flags |= O_RDWR;
  49.         } else {
  50.             flags |= O_WRONLY;
  51.         }
  52.     }
  53.  
  54.     //ako open fail vraca -1
  55.     return -1 != (*fd = open(path,flags,mod));
  56. }
  57.  
  58. int main(int argc, char **argv){
  59.     // if(3!=argc){
  60.     //     fprintf(stderr, "wrong cmd args num\n");
  61.     //     exit(EXIT_FAILURE);
  62.     // }
  63.     osAssert(3==argc, "Wrong num of cmd");
  64.     int fd; //file descriptor
  65.     osAssert(osOpenFile(argv[1],argv[2], &fd), "Opening failed");
  66.     close(fd);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement