Пытаюсь отправить таблицу целых чисел в файл, но я получаю некоторые ошибки:
fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
const int size = 20;
int *p = new int[size];
for(int i=0; i<size; i++) {
p[i] = i;
}
write (fd[0], p, sizeof(int)*size);
close(fd[0]);
После вызова этого кода в моем файле я вижу что-то вроде этого: \00\00\00\00\00\00\00
,
Когда вы пишете данные в файлах, если вы хотите прочитать их в текстовом редакторе, вам нужно преобразовать переменные в строки (сериализация).
Для этого вы можете использовать fprintf
а также fscanf
или реализовать свои собственные функции синтаксического анализа, вам нужно только манипулировать строками.
Чтобы создать читаемый файл, ваш код может быть изменен в:
FILE *f = fopen(argv[1], "w"); // "a", "w" or what you want
const int size = 20;
int *p = new int[size];
for(int i=0; i<size; i++) {
p[i] = i;
fprintf(f, "%d ", p[i]);
}
fclose(f);
Чтобы прочитать файл, вы можете сделать:
FILE *f = fopen(argv[1], "r");
int nb = 0;
int tab[100]; // a buffer
while((1 == fscanf("%d ", &tab[nb])) && (nb < 100))
nb++;
Это запишет разделенные пробелом целые числа с завершающим пробелом. Вы действительно не сказали, какой формат вам нужен, кроме «текст».
fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
if(fd[0] < 0) {
perror("open");
}
const int size = 20;
//int *p = new int[size];
for(int i=0; i<size; i++) {
char buf[20];
snprintf(buf, sizeof(buf), "%d ", i);
write(fd[0], buf, strlen(buf));
}
//write (fd[0], p, sizeof(int)*size);
close(fd[0]);