Мне нужно открыть файл, содержащий каждое число в новой строке. (представлен как строка)
Для чтения данных мне нужно использовать getline().
Чтобы изменить данные из строки в int, мне нужно использовать atoi().
Чтобы записать измененные данные в файл, мне нужно использовать write().
Что мне удалось сделать это:Запись int в двоичный файл в C
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
FILE *stream;
stream = fopen("stevila.txt", "r");
FILE *fd = fopen("test.bin", "w+");
char *line = NULL;
size_t len = 0;
ssize_t read;
int a=10;
char str[8192];
while ((read = getline(&line, &len, stream)) != -1) {
strcpy(str, line);
int val = atoi(str);
write(fd, val, a);
}
free(line);
fclose(stream);
}
EDIT:
Благодаря ответам, мне удалось создать программу, которая работает:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
FILE *f = fopen("text.txt","r");
mode_t mode = S_IRUSR | S_IWUSR; /* Allow user to Read/Write file */
int fd = open("out.bin",O_WRONLY|O_CREAT|O_TRUNC,mode);
if (f==NULL) {
perror("Error while opening 'text.txt' ");
return -1;
}
if(fd < 0){
perror("Error while opening 'out.bin' ");
return -1;
}
size_t max_size=64;
char* line;
line=malloc(max_size);
int d;
while ((d=getline(&line, &max_size, f))!=-1)
{
int tmp=atoi(line); /* Change string to int and save it to tmp */
if(write(fd,&tmp,sizeof(tmp)) == -1)
{
perror("Error while writing data ");
break;
}
}
fclose(f);
close(fd);
free(line);
return 0;
}
Теперь мы можем выполните эту команду в терминале, чтобы узнать, соответствует ли выходной файл:
od -i out.bin
'printf ("% s ", fd);' --- uhhh ... это определенно не то, что вы намереваетесь это сделать. – mah
Это прокомментировано, поэтому он не работает. –
Я редактировал мой код сейчас sry, я его в комментариях, потому что я пытался dfferent вещи – yack