问题描述
我必须编写一个程序,该程序分别读取单独的行中的数字.是否可以只读取文件的一行,然后从缓冲区读取int
,依此类推,直到文件结束?很难找到使用读写的良好示例.我的示例工作正常,但我想阅读直到检测到'\n'
char并将缓冲区转换为int为止.
I have to write a program that reads numbers in separate lines each. Is it possible to read only one line of the file and then read an int
from the buffer, and so on until the end of file? It is really hard to find good examples of using read and write. My example is kind of working but I'd like to read until it detects '\n'
char and then convert buffer into int.
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <iostream>
int fd[2];
void readFile(int fd) {
unsigned char buffer[10];
int bytes_read;
int k=0;
do {
bytes_read = read(fd, buffer, 10);
k++;
for(int i=0; i<10; i++) {
printf("%c", buffer[i]);
}
}
while (bytes_read != 0);
}
int tab[50];
int main(int argc, char *argv[]) {
if(argv[1] == NULL || argv[2] == NULL) {
printf("Function requires two arguments!\nGood bye...\n");
return -1;
}
else {
if (access(argv[1], F_OK) == 0) {
fd[0] = open(argv[1], O_RDONLY);
}
else {
fd[0] = open(argv[1], O_WRONLY|O_CREAT|O_SYNC, 0700);
const int size = 50;
for(int i=0; i<size; i++) {
char buf[10];
sprintf(buf, "%d\n", i+1);
write(fd[0], buf, strlen(buf));
}
close(fd[0]);
fd[0] = open(argv[1], O_RDONLY);
if (access(argv[2], F_OK) == 0)
fd[1] = open(argv[2], O_WRONLY);
else
fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700);
}
}
if (access(argv[2], F_OK) == 0)
fd[1] = open(argv[2], O_WRONLY);
else
fd[1] = open(argv[2], O_WRONLY|O_CREAT, 0700);
readFile(fd[0]);
close(fd[0]);
close(fd[1]);
}
修改后的代码:
void readFile(int fd) {
char buffer[10];
int bytes_read;
int k = 0;
do {
char t = 0;
bytes_read = read(fd, &t, 1);
buffer[k++] = t;
printf("%c", t);
if(t == '\n' && t == '\0') {
printf("%d", atoi(buffer));
for(int i=0; i<10; i++)
buffer[i]='\0';
k = 0;
}
}
while (bytes_read != 0);
}
推荐答案
逐字节读取,并检查'\n'
对应的每个字节(如果不是),然后将其存储到buffer
如果它是'\n'
,则将'\0'
添加到缓冲区,然后使用atoi()
Read Byte by Byte and check that each byte against '\n'
if it is not, then store it into buffer
if it is '\n'
add '\0'
to buffer and then use atoi()
您可以像这样读取一个字节
You can read a single byte like this
char c;
read(fd,&c,1);
请参见 read()
这篇关于使用read()函数从文件读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!