The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите разобратся с С, !*! Slava_D, 30-Янв-09, 15:24  [смотреть все]
Привет Всем!
пытаюсь написать маленькую прогу, которая с stdin пишет все в файл, но вот не хочет она у меня записывать в файл никак, пример

#include <stdio.h>
#define BUFSIZE 1024

int main(int argc, char* argv[])
{
    char line[BUFSIZE];
    FILE *fp;
    fp = fopen("param", "a");
    while (fgets (line, sizeof (line), stdin))
        {
            fputs(line, fp);
            printf("OK\n");
        }
    fclose(fp);
    return 0;
}
в чем может быть проблемма?

  • Помогите разобратся с С, !*! phpcoder, 15:28 , 30-Янв-09 (1)
    >в чем может быть проблемма?

    Советую начать с проверки значения, которое возвращает fopen()


    • Помогите разобратся с С, !*! Slava_D, 15:42 , 30-Янв-09 (2)
      >Советую начать с проверки значения, которое возвращает fopen()

      Оно создаёт файл, но в него ничего не пишет, попробывал под виндой скомпилировать, после первого запуска писала в файл, потом фигу...

      • Помогите разобратся с С, !*! phpcoder, 15:49 , 30-Янв-09 (3)
        >>Советую начать с проверки значения, которое возвращает fopen()
        >
        >Оно создаёт файл, но в него ничего не пишет, попробывал под виндой
        >скомпилировать, после первого запуска писала в файл, потом фигу...

        Только что скомпилировал и запустил под Линуксом. Всё работает.


        • Помогите разобратся с С, !*! Slava_D, 15:57 , 30-Янв-09 (4)
          >>>Советую начать с проверки значения, которое возвращает fopen()
          >>
          >>Оно создаёт файл, но в него ничего не пишет, попробывал под виндой
          >>скомпилировать, после первого запуска писала в файл, потом фигу...
          >
          >Только что скомпилировал и запустил под Линуксом. Всё работает.

          А у меня не хочет под фрёй, создаёт файл и не пишет ничего туда.
              if (fp==NULL)
              {
                  printf("Error");
                  return 0;
              }
          все проходит нормально!

        • Помогите разобратся с С, !*! Slava_D, 16:11 , 30-Янв-09 (6)
          >Только что скомпилировал и запустил под Линуксом. Всё работает.

          Попробуй phpcoder запусти её несколько раз, будет ли работать, мож она не делает fclose(fp), и эти записи в буфере хронятся, т.к. while (fgets (line, sizeof (line), stdin)) - это как я понимаю бесконечный цикл, и выход из него Ctrl-C, и файл не закрывается - может такое быть???

          • Помогите разобратся с С, !*! phpcoder, 16:16 , 30-Янв-09 (7)
            >>Только что скомпилировал и запустил под Линуксом. Всё работает.
            >
            >Попробуй phpcoder запусти её несколько раз, будет ли работать, мож она не
            >делает fclose(fp), и эти записи в буфере хронятся, т.к. while (fgets
            >(line, sizeof (line), stdin)) - это как я понимаю бесконечный цикл,
            >и выход из него Ctrl-C, и файл не закрывается - может
            >такое быть???

            fgets() ждет конца файла (EOF), так что выходить надо по Ctrl+D

            А по Ctrl+C ты просто программу вырубал, вот и не работало ничего.


            • Помогите разобратся с С, !*! Slava_D, 16:26 , 30-Янв-09 (8)
              >[оверквотинг удален]
              >>Попробуй phpcoder запусти её несколько раз, будет ли работать, мож она не
              >>делает fclose(fp), и эти записи в буфере хронятся, т.к. while (fgets
              >>(line, sizeof (line), stdin)) - это как я понимаю бесконечный цикл,
              >>и выход из него Ctrl-C, и файл не закрывается - может
              >>такое быть???
              >
              >fgets() ждет конца файла (EOF), так что выходить надо по Ctrl+D
              >
              >А по Ctrl+C ты просто программу вырубал, вот и не работало ничего.
              >

              Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ, что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё делать?, каждый раз его закрывать и открывать?

              • Помогите разобратся с С, !*! phpcoder, 16:31 , 30-Янв-09 (9)
                >Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ,
                >что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё
                >делать?, каждый раз его закрывать и открывать?

                Кто она? Ctrl+D это ты нажимаешь, чтобы обозначить конец файла, а если тебе на вход подадут файл через пайп, то там будет EOF и никакого Ctrl+D нажимать не придётся.

                Вообщем, неясно кто запускает твою программу и каким образом.

                • Помогите разобратся с С, !*! Slava_D, 16:38 , 30-Янв-09 (11)
                  >>Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ,
                  >>что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё
                  >>делать?, каждый раз его закрывать и открывать?
                  >
                  >Кто она? Ctrl+D это ты нажимаешь, чтобы обозначить конец файла, а если
                  >тебе на вход подадут файл через пайп, то там будет EOF
                  >и никакого Ctrl+D нажимать не придётся.
                  >
                  >Вообщем, неясно кто запускает твою программу и каким образом.

                  Запускает её squid, примерно такой строкой
                  external_acl_type my_prog children=1 %LOGIN %SRC /usr/squid/my_prog %u %s
                  squid передаёт вроде логин и айпи адрес, и ему надо ответить или OK или ERR,
                  что бы выяснить что он передаёт проге и в каком виде, я хочу записать в файл и посмотреть что там реально есть, и отвечаю ему OK в любом случае....

                  • Помогите разобратся с С, !*! phpcoder, 16:41 , 30-Янв-09 (12)
                    >external_acl_type my_prog children=1 %LOGIN %SRC /usr/squid/my_prog %u %s

                    Судя по записи, squid вам передаёт данные не через stdin, а через параметры коммандной строки. Зачем вы тогда из stdin-то читаете? ;)

                    • Помогите разобратся с С, !*! Slava_D, 16:45 , 30-Янв-09 (13)
                      >>external_acl_type my_prog children=1 %LOGIN %SRC /usr/squid/my_prog %u %s
                      >
                      >Судя по записи, squid вам передаёт данные не через stdin, а через
                      >параметры коммандной строки. Зачем вы тогда из stdin-то читаете? ;)

                      параметры командной строки не нужны это было сделано для другого, а про stdin я посмотрел в исходниках к squid, на пример ip_user_check.c, тама все через stdin....

                  • Помогите разобратся с С, !*! angra, 17:55 , 30-Янв-09 (14)
                    >что бы выяснить что он передаёт проге и в каком виде, я
                    >хочу записать в файл и посмотреть что там реально есть, и
                    >отвечаю ему OK в любом случае....

                    Зачем тогда С? Неужели вы не знаете ни одного скриптового языка общего назначения?


                    • Помогите разобратся с С, !*! Slava_D, 18:58 , 30-Янв-09 (15)
                      >>что бы выяснить что он передаёт проге и в каком виде, я
                      >>хочу записать в файл и посмотреть что там реально есть, и
                      >>отвечаю ему OK в любом случае....
                      >
                      >Зачем тогда С? Неужели вы не знаете ни одного скриптового языка общего
                      >назначения?

                      Ща написано на перле, до этого было что-то на bash, но на прокси много пользователей, плюс хочу еще некоторую обработку делать, по мимо запросов sql, работа с файлами и т.д, хочу попробывать осилить на С, мне кажется будет быстрей (моё личное мнение, хочу пропрбывать)


              • Помогите разобратся с С, !*! vic, 16:35 , 30-Янв-09 (10)
                >Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ,
                >что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё
                >делать?, каждый раз его закрывать и открывать?

                ну так случиться EOF как и в этом случае:
                echo -e "1234\n2345" | proga

                если хотите чтобы каждая строка записывалась без буферизации, то либо ее отключите setbuf(), либо вызывайте fflush() после каждой записи.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру