C:系统调用和反转文件的指针

时间:2015-02-12 03:45:16

标签: c

解决。谢谢lutogniew .....只是让它变得复杂......

所以我在完成家庭作业时遇到了一些麻烦。分配是接收一个文件(仅使用系统调用),将其反转并写入包含反转数据的输出文件(仅限ASCII)。一个问题是反向部分必须用指针完成。我在下面做了以下,这确实有效。但是,它不使用指针反转。

我的问题是,我是如何使用指针访问data []之类的东西?或者,我如何从文件中读取它。我尝试的所有内容(主要是char **)只读取null。

非常感谢任何帮助。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    int i = 0; 
    int fileOut = open("output.txt", O_WRONLY | O_APPEND);
    int fileIn = open("input.txt", O_RDONLY);

    int start = lseek(fileIn, 0 , SEEK_CUR);
    int end = lseek(fileIn, 0 , SEEK_END);
    int restart = lseek(fileIn, 0-end , SEEK_CUR);

    char data[end];
    char reverseData[end];
    read(fileIn, data, end);
    for(i = 0; i< end; i++){
        reverseData[i] = data[end-(i+1)];
    }

    write(fileOut, reverseData, end);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

接受答复后。

OP需要考虑另一种方法:

为了好玩,一种不那么严重的递归方法来反转文件。

void reverse(int fileIn, int fileOut) {
  char data;
  if (read(fileIn, &data, 1) == 1) {
    reverse(fileIn, fileOut);
    write(fileOut, &data, 1);
  }
}

int main(void) {
  int fileOut = open("output.txt", O_WRONLY | O_APPEND);
  int fileIn = open("input.txt", O_RDONLY);
  reverse(fileIn, fileOut);
  close(fileIn);
  close(fileOut);
  return 0;
}

答案 1 :(得分:0)

你必须明白在C中作为数组呈现给你的东西,实际上只是一个指针,指向属于该数组的内存的开头。这个片段应该让一切都清楚:

int test[] = { 1, 2, 3 };
int* ptr = test + 2;       // ptr now points to the third element

修改

至于将数据加载到数组中:再次记住,数组本身只是一个内存池(缓冲区) - 它从上面提到的指针指向的地方开始,其大小等于numberOfElements * sizeOfSingleElement。现在看一下read函数的签名:

size_t read(int fildes, void* buf, size_t nbytes);

它将nbytes读入buf指向的缓冲区。敲响了铃声?