使用 C 系统调用修改文件

Modifying a file using C System Calls

我想使用 C 系统调用修改文件中的特定字节。我对 open() 和 read() 以及 write() 系统调用有一些了解。

假设我想修改文件中的第 1024 个字节,而文件有 2048 个字节。所以我可以使用 read() 将 1024 个字节读出到字符数组并更改所需的字节。

现在,当我将修改后的字符数组写回文件时,文件的其余部分是否保持不变?学习资料在这方面不清楚。请帮助我理解这一点。

您可以使用来自 <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() 在某些情况下可能会 return 提前。仅写入单个字节应该不是问题,但如果您写入更改大块文件,则可能会成为问题。流接口更易于使用。这是 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);
}