Advertisement
fr1sk

Untitled

Mar 4th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 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. //osErrorFatal(3==argc, "Wrong num of cmd", __FILE__, __LINE__);
  65. int fd; //file descriptor
  66. osAssert(osOpenFile(argv[1],argv[2], &fd), "Opening failed");
  67. close(fd);
  68. return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement