Я хочу написать несколько поддельного текста в файле («HelloWorld» текст в файле с именем HelloWorld), но не с начала. Я думал до lseek() функция.C: lseek(), связанный вопрос
Если я использую следующий код (отредактирован):
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#define fname "helloworld"
#define buf_size 16
int main(){
char buffer[buf_size];
int fildes,
nbytes;
off_t ret;
fildes = open(fname, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR);
if(fildes < 0){
printf("\nCannot create file + trunc file.\n");
}
//modify offset
if((ret = lseek(fildes, (off_t) 10, SEEK_END)) < (off_t) 0){
fprintf(stdout, "\nCannot modify offset.\n");
}
printf("ret = %d\n", (int)ret);
if(write(fildes, fname, 10) < 0){
fprintf(stdout, "\nWrite failed.\n");
}
close(fildes);
return (0);
}
, он компилирует хорошо, и она работает без каких-либо явных ошибок. Тем не менее, если я:
cat helloworld
Выход не то, что я ожидал, но:
helloworld
Can
Где «Может» пришедшего из, и где мои пустые пространства?
Должен ли я ожидать «нулей» вместо пробелов? Если я пытаюсь открыть helloworld с gedit, возникает ошибка, жалуясь, что кодировка символа файла неизвестна.
СПУСТЯ EDIT: После я редактировал мою программу с правом буфера для записи, а затем скомпилировать/запустить снова, файл «HelloWorld» до сих пор не может быть открыт с Gedit. сильный текст
СПУСТЯ EDIT Я понимаю, этот вопрос сейчас. Я добавил в код следующее:
fildes = open(fname, O_RDONLY);
if(fildes < 0){
printf("\nCannot open file.\n");
}
while((nbytes = read(fildes, c, 1)) == 1){
printf("%d ", (int)*c);
}
А теперь вывод:
0 0 0 0 0 0 0 0 0 0 104 101 108 108 111 119 111 114 108 100
Моя проблема заключалась в том, что я ожидал, что пространства (32) вместо нулей (0).
Из моей книги: «Само по себе поиск в конце файла ничего не делает - запрос на чтение новой позиции файла будет возвращать EOF. Если впоследствии запрос на запись в эту позицию , новое пространство будет создано между старой длиной файла и новой длиной, и оно будет дополнено нулями ». Теперь я понимаю, что нули - это не пробелы. Из-за этих нулей я не могу открыть файл с помощью обычного текстового редактора? –
Что вы подразумеваете под "can not open"? Что происходит, когда вы пытаетесь? Если вы хотите знать, что происходит, просмотрите шестнадцатеричный дамп файла (например, открыв оболочку и сделав cat helloworld | xxd) –