【发布时间】:2011-02-04 03:53:24
【问题描述】:
我想在一个文件中写一些 bogus 文本(名为 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”从哪里来,我的空白在哪里?
我应该期待“零”而不是空格吗?如果我尝试用gedit打开helloworld,会报错,提示文件字符编码未知。
稍后编辑: 在我用正确的缓冲区编辑我的程序进行写入,然后再次编译/运行后,仍然无法使用 gedit 打开“helloworld”文件。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)。
【问题讨论】: