1. Си / Говнокод #23235

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    int checkFile(char *s)
    {
    	return ( open(s, O_RDONLY, 0) == -1) ? 0 : 1;
    }
    
    int main(int argc, char *argv[])
    {
    	if(argc != 2) { printf("Тут один аргумент важен хуле\n"); return 1; }
    	if(checkFile(argv[1]))
    	{
    		int fd = open(argv[1], O_RDONLY, 0);
    		char buffer[1024];
    		read(fd, &buffer, sizeof(buffer));
    		printf("%s\n", buffer);
    		if( close(fd) == -1) perror("close");
    	}
    	else
    		printf("Файл не существует\n");
    	return 0;
    }

    Моя альтернатива программе cat, отсасывай cat ябучий!!

    Запостил: Bro-C, 02 Августа 2017

    Комментарии (20) RSS

    • Судо мудо кэт
      Ответить
    • cat принимает на вход произвольное количество параметров, гений
      Ответить
    • bool checkFile(char *s) {
      	return ( open(s, O_RDONLY, 0) != -1);
      }
      Ответить
      • bool checkFile(char *s) {
        	return open(s, O_RDONLY, 0) != -1;
        }
        Ответить
        • bool checkFile(char *s) {
                  int fd = open(s, O_RDONLY, 0);
                  if (fd != -1) {
                          close(fd);
                          return true;
                  } else {
                          return false;
                  }
          }
          Ответить
          • Это какая-то специальная паралимпиада? Зачем нужен checkFile, если потом сразу тот же файл открывать надо, с теми же флагами?
            Ответить
            • da
              Ответить
            • > Зачем нужен checkFile
              Автор хотел добавить гонку, а то UB'а с буфером маловато было.
              Ответить
              • Где там уб?
                Ответить
              • А как добавить блокировку, чтобы другой процесс ждал пока файл не освободился?
                Ответить
          • bool checkFile(const char *s) {
                    int fd = open(s, O_RDONLY, 0);
                    if (fd != -1) {
                            close(fd);
                            return true;
                    } else {
                            return false;
                    }
            }
            Ответить
    • раз видел говно, гду струдеру дали лабу на С написать cat. так он в лоб system'ом штатный cat вызывал.

      ЗЫ думал что здесь видел - но поиск не находит.
      Ответить
    • "cat" -- значит "conCATenate", а не то, что у тебя. А то, что конкатенация одного файла эквивалентна этому файлу -- всего-лишь побочный эффект `cat' (за который мы его и любим)
      Ответить

    Добавить комментарий