Я хочу написать некоторый фиктивный текст в файл (текст "helloworld" в файле с именем helloworld ), но не с самого начала. Я думал о 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
Откуда исходит "Can" и где мои пустые места?
Должен ли я ожидать "нули" вместо пробелов? Если я пытаюсь открыть helloworld с помощью gedit, возникает ошибка, сообщающая, что кодировка символов файла неизвестна.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ :
После того, как я отредактировал свою программу с подходящим буфером для записи, а затем снова скомпилировал / запустил, файл «helloworld» все еще не может быть открыт с помощью gedit. strong text
ПОЗЖЕ РЕДАКТИРОВАТЬ
Теперь я понимаю проблему. Я добавил в код следующее:
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).