我想使用C系统调用修改文件中的特定字节。我对open()和read()以及write()系统调用有一些了解。
假设我想修改文件中的第1024个字节,文件有2048个字节。所以我可以使用read()读出1024字节到字符数组并更改所需的字节。
现在当我将修改后的字符数组写回文件时,文件的其余部分是否保持相同?学习材料在这一点上并不清楚。请帮我理解这个。
答案 0 :(得分:1)
您可以使用<stdio.h>
:
#include <stdio.h>
#include <ctype.h>
/* uppercase letter at offset 1024 */
FILE *fp = fopen("filename", "r+b");
if (fp) {
fseek(fp, 1024L, SEEK_SET);
int c = getc(fp);
if (c != EOF) {
fseek(fp, 1024L, SEEK_SET);
putc(toupper((unsigned char)c), fp);
}
fclose(fp);
}
如果您可以访问Posix API,则可以直接使用系统调用,但请注意write()
可能会在某些情况下提前返回。它只是写一个字节应该不是问题,但如果你写了更改大块的文件,可能会成为一个问题。流接口更易于使用。这是Posix代码:
#include <unistd.h>
#include <ctype.h>
/* uppercase letter at offset 1024 */
unsigned char uc;
int hd = open("filename", O_RDWR | O_BINARY);
if (hd >= 0) {
lseek(hd, 1024L, SEEK_SET);
if (read(hd, &uc, 1) == 1) {
lseek(hd, -1L, SEEK_CUR);
uc = toupper(uc);
write(hd, &uc, 1);
}
close(hd);
}