gpt4 book ai didi

C: lseek() 相关问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:36 25 4
gpt4 key购买 nike

我想在文件中写入一些伪造文本(名为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,出现错误,提示文件字符编码未知。

后期编辑:我用正确的写入缓冲区编辑我的程序,然后再次编译/运行后,“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)。

最佳答案

在这个函数调用中,write(fildes, fname, buf_size)fname 有 10 个字符(加上尾随的 '\0' 字符,但是你告诉写出 16 个字节的函数。谁知道 fname 字符串之后的内存位置是什么。

此外,我不确定您所说的“我的空白空间在哪里?”是什么意思。

关于C: lseek() 相关问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com