最小化C中的读写系统调用

时间:2017-12-12 21:43:45

标签: c file-io io system-calls

我是一名计算机科学专业的学生,​​我必须在文件系统的输入/输出上用C语言实践。实际上我必须编码文件系统的输入/输出。我必须创建函数:openIt,closeIt,readIt和writeIt。 目前我有这个:

int readIt(void *p, unsigned int size, unsigned int nbelem, FILE *f) {
  printf("Read of %d char … \n", nbelem);
  if (f->mode != 'L'){
    printf("ERROR : file not open in read mode. \n");
    return -1;
  }
  int sizeRead = 0;
  for (int i  = 0; i < nbelem; i++){
    if ((sizeRead = read(f->fd,p,size)) < 0){
      printf("ERROR : read impossible. \n");
    }
  }
  return sizeRead;
}

使用此文件结构:

#define MAX 10

struct _ES_FICHIER {
  char mode ;
  char buffer[MAX];
  int index ;
  int fd ;
};

但事实上,这种实用的目的是最大限度地减少读,写,打开和关闭系统调用。然而,我已经做了一个循环,所以它没有真正优化,我读得太多了。

我的readIt和writeIt函数在文件test.c中使用,如:

FILE *f1;
FILE *f2;
char c;

while (readIt (&c, 1, 1, f1) == 1) {
   writeIt (&c, 1, 1, f2);
}

在我的文件1和文件2中,我只有字符串:«abcd»。

我暂时不使用文件结构的缓冲区。它必须包含要读取的文件的内容,并且只有在需要时才必须使用read()。例如,当缓冲区已满或文件已完全读取时。

基本上:我们将文件的所有内容都放在缓冲区中 - &gt;我们调用read将此缓冲区存储在p。

但是我不明白如何在没有很多read()调用的情况下获取文件的内容。我真的陷入了这个问题。

感谢您的帮助。

0 个答案:

没有答案