2

我想将文本写入文件。我必须使用 write() 而不是 fwrite()

void write(char *buffer, char *target){
int fh;
    if((fh=open(target, O_RDWR)) >= 0){
                    printf("It works\n");
    } else {
        printf("Cannot open\n");
    }

    if((write(fh, buffer, sizeof(buffer))) >= 0){
        printf("-> It works\n");
    } else {
        printf("Cannot write\n");
    }
    close(fh);
}

我可以写入该文件,但我无法读取它。缓冲区包含一些文本,但是当我打开目标文件时,我得到的只是 \00\00\00\00

我听说 fopen 和 fwrite 可以,但我必须使用 open() 和 write()。我希望有一个人可以帮助我。

4

3 回答 3

3
  if((write(fh, buffer, sizeof(buffer))) >= 0){

您需要将缓冲区的长度传递给您的函数。sizeof(buffer) 将返回 char* 数据类型的大小(4(32 位)或 8(64 位)字节)。

于 2013-01-07T01:43:27.810 回答
1

您真的不想定义自己的write(),因为它会给系统调用 C 包装器起别名,也称为 write。

另外,如果缓冲区中有一个字符串,您将需要准确地写入它的长度。

void mywrite(char *buffer, char *target) {
. . .
    write(fh, buffer, strlen(buffer))
于 2013-01-07T01:44:17.947 回答
1

a) 你自己的函数名是 write

b) 使用 strlen 而不是 sizeof 作为写入的最后一个参数。

所以

a)将您的函数名称更改为除 write 之外的其他名称。

b) 使用 strlen 代替 sizeof。

于 2013-01-07T01:46:04.377 回答