使用read()逐字读取文件

时间:2014-09-20 17:26:23

标签: c file io posix

我正在做一个在命令行参数中读取文件的程序,并为它读取的每个单词创建一个新文件。

实施例。 1个10字的文件变为----> 10个文件,每个文件一个字。

我已经使用fread,fwrite,fget等工作了,但是我们只允许使用read()和write()来从文件中读/写。这样做现在看起来既可笑又不必要,我开始认为我们的老师告诉我们错了,所以我的三个问题是:

  1. 这可能吗?
  2. 是通过操纵read()接受的字节来完成的吗?
  3. 有人可以用外行的术语解释如何操纵read()/ write()来接受不同长度的各种单词
  4. 我理解read()从输入流中读取然后将其放入缓冲区但是我很确定它不像Java那样我可以给它一个开始和停止位置它会读取介于两者之间的所有内容,然后从位置停止+ 1继续阅读。

2 个答案:

答案 0 :(得分:1)

不是那么复杂,这里有一个片段,展示了如何从文件中读取内容:

int fd = open("input.txt", O_RDONLY); // fd stands for file descriptor
int length, i;
char buffer[1000];
length = read(fd, buffer, 1000); // read() return the number of read characters
for (i = 0; i < length; i++) {
    putchar(buffer[i]);
}
printf("\n");
close(fd);

有关open()read()close()的详情,请参阅使用man 2 function。在手册页中列出了编译代码所需的头文件。

写作将如下所示:

fd = open("output.txt", O_WRONLY);
write(fd, word, strlen(word)); // word is an array of char.

答案 1 :(得分:0)

read()调用的工作原理如下:

int read( int handle, void *buffer, int nbyte );

其中:handle是文件描述符,buffer是存储读取字节的位置,nbyte是要读取的字节数。

为了做你被告知要做的事情,我认为你必须迭代文件描述符,先看看这个单词有多长,然后lseek()回到起点(简单,如同你现在知道单词的长度了)然后用read()读取它。