我必须打开一个文件,其中包含新行中的每个数字。 (表示为字符串)
要读取数据,我需要使用getline()。
要将数据从字符串更改为int,我需要使用atoi()。
要将更改的数据写入文件,我需要使用write()。
我设法做的是:
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
FILE *stream;
stream = fopen("stevila.txt", "r");
FILE *fd = fopen("test.bin", "w+");
char *line = NULL;
size_t len = 0;
ssize_t read;
int a=10;
char str[8192];
while ((read = getline(&line, &len, stream)) != -1) {
strcpy(str, line);
int val = atoi(str);
write(fd, val, a);
}
free(line);
fclose(stream);
}
编辑:
感谢答案,我设法创建了一个有效的程序:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
FILE *f = fopen("text.txt","r");
mode_t mode = S_IRUSR | S_IWUSR; /* Allow user to Read/Write file */
int fd = open("out.bin",O_WRONLY|O_CREAT|O_TRUNC,mode);
if (f==NULL) {
perror("Error while opening 'text.txt' ");
return -1;
}
if(fd < 0){
perror("Error while opening 'out.bin' ");
return -1;
}
size_t max_size=64;
char* line;
line=malloc(max_size);
int d;
while ((d=getline(&line, &max_size, f))!=-1)
{
int tmp=atoi(line); /* Change string to int and save it to tmp */
if(write(fd,&tmp,sizeof(tmp)) == -1)
{
perror("Error while writing data ");
break;
}
}
fclose(f);
close(fd);
free(line);
return 0;
}
现在我们可以在终端中运行此命令,以查看输出文件是否符合预期:
od -i out.bin
答案 0 :(得分:2)
write
采用文件描述符而不是文件指针。
例如,在Linux O / S上。
http://linux.die.net/man/2/write
为什么不使用fwrite函数来做你需要的事情
http://www.cplusplus.com/reference/cstdio/fwrite/
您可以使用此功能从fopen
返回的文件指针,并根据需要进行打印。
答案 1 :(得分:2)
您不能将L.geoJson
用作FILE*
的参数。您有以下选择:
使用write
。 fwrite
的签名是:
fwrite
使用size_t fwrite( const void *buffer, size_t size, size_t count,
FILE *stream );
函数从FILE*
获取文件描述符,然后使用fileno
。 write
的签名是:
fileno
int fileno(const FILE *stream);
的签名是
write
您对ssize_t write(int fildes, const void *buf, size_t nbyte);
的使用不正确。您正在传递write
,这不是变量的地址。您使用val
作为第三个参数。这需要改为:
a
使用write(fd, &val, sizeof(val));
代替open
。
我的建议是使用fopen
。它是标准的C库函数,而fwrite
则不是。
此外,请确保以二进制模式打开文件。不要使用write
,而是使用"w+"
。
"wb"
在退出之前添加一行以关闭文件。如果您使用FILE *fd = fopen("test.bin", "wb");
打开文件,请使用fopen
关闭它。如果您使用fclose
打开文件,请使用open
将其关闭。