В целях отслеживания вызовов ввода-вывода я перезаписал fwrite
в разделяемой библиотеке, которую я LD_PRELOAD при запуске программы. В моей версии fwrite
я получаю абсолютное смещение записи, используя
long int pos = ftell(stream);
Затем значение передается функции, которая принимает аргумент size_t (т. е. unsigned long), и значение печатается.
Я столкнулся с некоторыми вызовами со смещением 18446744073709551615 (2 ^ 64 - 1), поэтому я предполагаю, что начальный длинный int, возвращаемый ftell, был -1. Эти операции всегда записывают 10 байт.
Итак, мой вопрос: что могло привести к тому, что смещение потока было установлено на -1?
Я не отслеживаю имена файлов, к которым обращаются эти странные fwrite, поэтому я не знаю, к чему обращаются. Также я должен уточнить, что программа является программой MPI. Возможно, задействованный поток на самом деле является сокетом или чем-то еще, кроме файла...
errno
? - person Sakthi Kumar   schedule 06.03.2014stream
невозможность поиска (например, сокет, канал, ...) действительно приведет к тому, чтоftell()
вернет -1 (ошибка должна бытьEBADF
в этом случае) - person Ingo Leonhardt   schedule 06.03.2014