Fead вызывает ошибку сегментации -- c поле с участием fread пол Связанный проблема

fread causing segmentation fault


0
vote

проблема

русский

Попытка создать файл 1024 байтов случайных данных. Когда я запускаю это, я получаю ошибку неисправности сегментации на линии FREAD. Кто-нибудь видит, что я делаю не так? Спасибо!

 <код> #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h>  #define PERMS 0666  int main() {     char buf[1024];     if (creat("test.txt", PERMS) < 0) {        fprintf(stderr, "couldn't create file ");        exit(0);    }     char randomData[1024];    FILE* fp;    fp = (void*) open("/dev/urandom", O_RDONLY, PERMS);    fprintf(stderr, "here ");    fread(&randomData, 1024, 1, fp);    fclose(fp);     return 0; }   
Английский оригинал

Trying to create a file of 1024 bytes of random data. When I run this, I get a segmentation fault error on the fread line. Anyone see what I am doing wrong? Thanks!

#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h>  #define PERMS 0666  int main() {     char buf[1024];     if (creat("test.txt", PERMS) < 0) {        fprintf(stderr, "couldn't create file ");        exit(0);    }     char randomData[1024];    FILE* fp;    fp = (void*) open("/dev/urandom", O_RDONLY, PERMS);    fprintf(stderr, "here ");    fread(&randomData, 1024, 1, fp);    fclose(fp);     return 0; } 
</div
     
       
       

Список ответов

9
 
vote
vote
Лучший ответ
 

<Код> open Возврат файловый дескриптор, а не <код> FILE * Указатель. Используйте <Код> fopen :

 <код> fp = fopen("/dev/urandom", "r");   

в сторону: что случилось с этим <код> (void *) ztist? Он скрывает ошибку от вас. Психическая отладки говорит мне, что вы вставили, чтобы изгнать, чтобы избавиться от «присваивания, указывающую у integer без активов» предупреждение, но это не правильное исправление в этом случае. Когда вы подобные странным предупреждениям, вы должны проверить документацию, прежде чем прибегать к вводу сумасшедших кабин всех Willy-Nilly.

В сторону 2: Ваша программа не пишет никаких данных в ваш <код> test.txt файла. На самом деле, вы утеряете дескриптор файла, который вы сразу же создали, поэтому он в настоящее время не может ничего не писать. Даже если вам удалось написать через 1024 байта, вы пытаетесь прочитать из /dev/urandom , он не будет текстовых данных, так что расширение файла немного странно.

в сторону 3: почему вы используете <код> creat() в первую очередь? Его Человек страница вполне ясно, что этот интерфейс сделан устаревшим на <код> open(2) / код> ".

 

open return a file descriptor, not a FILE * pointer. Use fopen:

fp = fopen("/dev/urandom", "r"); 

Aside: What's up with that (void *) cast? It's hiding the bug from you. Psychic debugging tells me that you inserted the cast to get rid of an "assignment makes pointer from integer without a cast" warning, but that's not the right fix in this case. When you get strange warnings like that, you should check out the documentation before resorting to inserting crazy casts all willy-nilly.

Aside 2: Your program doesn't write any data into your test.txt file. In fact, you leak the file descriptor you created immediately anyway, so it currently can't write anything. Even if you did manage to write through the 1024 bytes you're trying to read from /dev/urandom, it's not going to be text data, so that file extension is a bit weird.

Aside 3: Why are you using creat() in the first place? Its man page says quite clearly "This interface is made obsolete by open(2)".

</div
 
 

Связанный проблема

73  C ++ - включить Unistd.h: почему бы не Cunistd?  ( C include unistd h why not cunistd ) 
Сказано, что при включении файлов заголовка C в C ++ суффикс «.h» следует удалить, а затем добавить «C» в начале. Например, <код> #include <cstdio> вместо <к...

0  Как я могу хранить разные виды операторов в 2D-массиве в C?  ( How can i store different kinds of operators in a 2d array in c ) 
Я хочу сделать функцию y = f (x) в виде строки и выяснить операторы в нем, чтобы хранить их в 2D-массиве, где каждый операторы будут рассматриваться как разде...

1  Связывание с DLL в C / C #  ( Linking with dll in c c ) 
Я пытался связать с третьей стороной DLL. Я пробовал 3 разными способами: путем компиляции C в Cygwin, составив C ++ в Visual Studio и путем компилирования C ...

3  Malloc Все доступные памяти для хеш-таблица  ( Malloc all available memory for a hash table ) 
Я хочу построить хеш-таблицу, настолько большой, насколько это возможно на машине. Я думал, что при времени инициализации я бы претендовал на большой блок пам...

838  Почему эти конструкции используют поведение Pre и Post-Actrention undefined?  ( Why are these constructs using pre and post increment undefined behavior ) 
<код> getenv()1 ...

0  Не может запустить TCP-сервер на iOS, сотовой  ( Cannot run tcp server on ios cellular ) 
Я пытаюсь запустить TCP-сервер на iOS из сотовой связи. В целях задачи этого вопроса я написал эту очень упрощенную версию сервера и клиента в C, используя So...

0  Согласите несколько строк?  ( Concat multiple strings ) 
У меня есть строка, как приведенная ниже, но мне нужно объединить косые в каталогах, есть ли способ безопасно объединять несколько строк? <код> // Need to i...

5  Возвращая указатель на местную структуру  ( Returning pointer to a local structure ) 
Безопасно, чтобы вернуть указатель на локальную структуру в C? Я имею в виду это делать <код> struct myStruct* GetStruct() { struct myStruct *str =...

2  Если данные Spark будут кэшировать Off-Heap, у него будет спецификация байта?  ( If sparks data will be cached off heap will it have a byte level specification ) 
Я узнал из разных блогов, особенно этот один , что в ближайшее время Apache Spark будет кэшировать кучу Java (в public class AndroidAudioDevice { AudioT...

4  Должны быть использованы кронштейны для одной строки условных утверждений? [закрыто]  ( Shall brackets be used for one line conditional statements ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

8  Нужно ли набрать CAST MALLOC и CALOOC [Дубликат]  ( Is it necessary to type cast malloc and calloc ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

72  Розетка принимает - «Слишком много открытых файлов»  ( Socket accept too many open files ) 
Я работаю над школьным проектом, где мне пришлось написать многопоточный сервер, и теперь я сравниваю его с Apache, запустив некоторые тесты против него. Я ис...

0  Напишите программу, которая извлекает содержимое файла RPM в Windows  ( Write a program that extracts the contents of an rpm file on windows ) 
Я хочу написать программу, которая извлечет содержимое RPM-файла и выполняет некоторые проверки проверки. Я буду использовать Qt для интерфейса, чтобы програм...

4  Преобразовать фильм в Openni * .oni видео  ( Convert movie to openni oni video ) 
the библиотека Kinect Openni использует пользовательский формат видеофайла для хранения видеороликов, которые содержат информацию RGB + D. Эти видео имеют р...

0  C / C ++ Смешанное программирование: неисправность сегментации GDB часто  ( C c mixed programming gdb segmentation fault frequently ) 
Я всегда понимаю падение GDB, когда пытаюсь распечатать определенно действительную структуру / переменную. И это часто разбивается, если я попытался позвонить...

Связанный проблема

73  C ++ - включить Unistd.h: почему бы не Cunistd? 
0  Как я могу хранить разные виды операторов в 2D-массиве в C? 
1  Связывание с DLL в C / C # 
3  Malloc Все доступные памяти для хеш-таблица 
838  Почему эти конструкции используют поведение Pre и Post-Actrention undefined? 
0  Не может запустить TCP-сервер на iOS, сотовой 
0  Согласите несколько строк? 
5  Возвращая указатель на местную структуру 
2  Если данные Spark будут кэшировать Off-Heap, у него будет спецификация байта? 
4  Должны быть использованы кронштейны для одной строки условных утверждений? [закрыто] 
8  Нужно ли набрать CAST MALLOC и CALOOC [Дубликат] 
72  Розетка принимает - «Слишком много открытых файлов» 
0  Напишите программу, которая извлекает содержимое файла RPM в Windows 
4  Преобразовать фильм в Openni * .oni видео 
0  C / C ++ Смешанное программирование: неисправность сегментации GDB часто 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.