2012-05-30 2 views
1

У меня есть файл открыт в режиме записи, как показано ниже:Два последовательных fwrites операции

int a = 10; 
char b = 'm'; 
int y = 0; 
char z; 

FILE *fp = NULL; 
fp = fopen("/config/gps_backup.dat","w"); 

Я делаю frwite двух переменных в файле (первый является целым числом, а второй один является характер), как показано ниже:

fwrite(&a,1,sizeof(int),fp); 
fwrite(&b,1,sizeof(char),fp); 
  1. Будет два последовательных FWRITE операции заменяют друг друга
  2. Если нет, то можно два последовательных Fread операции заполнения должным образом в мои переменные

для например:

fread(&y,1,sizeof(int),fp); 
fread(&z,1,sizeof(char),fp); 

Может у и г переменная содержит значение 10, а «т», если последовательные Fread операции выполняются.

Tha

+0

Ваш полный код? Выполняются ли ваши операции чтения сразу после операций записи или когда? –

ответ

1

Нет, последовательные записи не заменяют друг друга. Они выполняются в одном дескрипторе файла, а операционная система отслеживает и не перезаписывает. Что касается чтения, если вы не закрываете файловый дескриптор между чтениями, эти два чтения будут правильно заполнять ваши переменные, если вы правильно проанализируете размеры.

+0

@ Cytinus..So, если я сделал две операции fwrite с 1-й переменной, записанной как integer, и 2-й переменной, записанной как символ. Первая операция fread дала бы мне целое число, а вторая операция fread дала бы мне право на символ? – Maddy

+0

Нет, fread будет обрабатывать все, что передается в качестве символьного буфера. Возможно, вам понадобится сделать что-то вроде: 'yint = atoi (y);', чтобы получить целочисленное значение. – cytinus

+0

@cytinus Для 'atoi' определенно не нужно использовать, поскольку' fwrite' и 'fread' работают двоично. –

2

Два последовательных файла fread или fwrite не должны вызывать никаких проблем, если они не выполняются параллельно.

Система будет поддерживать указатель поиска в ФАЙЛЕ * и гарантировать, что вы получите правильные данные, записанные и прочитанные во время последовательных сценариев и freads.

Для получения более подробной информации вы можете обратиться к man page.

В нем четко говорится ниже в разделе Возвращаемые значения

The functions fread() and fwrite() advance the file position indicator 
for the stream by the number of bytes read or written. They return the 
number of objects read or written. If an error occurs, or the end-of- 
file is reached, the return value is a short object count (or zero). 
Смежные вопросы