C 未在终端中打印的文件内容
嗨,我正在尝试从一个文件中读取并在终端上打印它。但是C 未在终端中打印的文件内容,c,file,fwrite,C,File,Fwrite,嗨,我正在尝试从一个文件中读取并在终端上打印它。但是fwrite()不打印任何内容。谁能帮帮我吗!我看不到终端上文件的输出。调试后,我所能看到的是程序没有进入fwrite()之前使用的while循环 #包括 #包括 #包括 #包括 #包括 #包括 #定义BUF_大小128 int main(int argc,char*argv[]) { int BATT_fd,重新写入,重新读取,i; 字符缓冲区[BUF_大小]; 如果(argc!=2) { printf(“\n用法:cp file1 file
fwrite()
不打印任何内容。谁能帮帮我吗!我看不到终端上文件的输出。调试后,我所能看到的是程序没有进入fwrite()
之前使用的while循环
#包括
#包括
#包括
#包括
#包括
#包括
#定义BUF_大小128
int main(int argc,char*argv[])
{
int BATT_fd,重新写入,重新读取,i;
字符缓冲区[BUF_大小];
如果(argc!=2)
{
printf(“\n用法:cp file1 file2\n”);
返回1;
}
BATT_fd=打开(argv[1],O_RDWR | O|u CREAT,S_IRWXU);
如果(电池fd==-1)
{
佩罗(“公开”);
返回2;
}
printf(“\n文件已成功打开,文件描述为%d\n”,BATT\u fd);
printf(“将数据输入文件\n”);
scanf(“%[^\n]”,缓冲区);
如果((ret_写入=写入(BATT_fd和缓冲器,BUF_大小))==0)
{
printf(“什么都不写”);
}
否则如果((ret_write=write(BATT_fd和buffer,BUF_SIZE))=-1)
{
printf(“写入错误”);
}
其他的
{
printf(“已将%d个字符写入文件”,重新写入);
printf(“地址写入为%x\n”,缓冲区[i]);
}
如果((ret_读取=读取(BATT_fd和缓冲器,BUF_大小))>0)
{
佩罗(“阅读”);
返回4;
}
其他的
{
而((ret_读取=读取(BATT_fd和缓冲器,BUF_大小))>0)
{
fwrite(缓冲区,1,重新读取,标准输出);
}
}
关闭(BATT_fd);
返回0;
}
输出:
从文件中读取数据之前,您需要将文件中的当前位置移到开头。这是因为您的写入操作已将当前位置移动到文件的末尾,所以没有任何内容可供读取;) 参见fseek 编辑:
lseek在您的情况下会更好(请参阅注释)在从文件中读取数据之前,您需要将文件中的当前位置移到开头。这是因为您的写入操作已将当前位置移动到文件的末尾,所以没有任何内容可供读取;) 参见fseek 编辑:
lseek在您的情况下会更好(请参阅注释)在从文件中读取数据之前,您需要将文件中的当前位置移到开头。这是因为您的写入操作已将当前位置移动到文件的末尾,所以没有任何内容可供读取;) 参见fseek 编辑:
lseek在您的情况下会更好(请参阅注释)在从文件中读取数据之前,您需要将文件中的当前位置移到开头。这是因为您的写入操作已将当前位置移动到文件的末尾,所以没有任何内容可供读取;) 参见fseek 编辑:
lseek在你的情况下会更好(见评论)另外,在它之前的
if
的逻辑是不正确的:它应该是if(ret_read
[…]是的,对。我已经停止了对第一个错误的调查:)谢谢你们,但似乎fseek需要文件指针作为第一个参数,但这里我使用了integer(BATT_fd)存储文件描述符。是否有任何方法可以让我在fseek中使用整数描述符,或者我应该将BATT_fd type更改为FILE*并将open、read和write更改为fopen、fread和fwrite?使用lseek then()同样,前面的if
逻辑不正确:它应该是if(ret_read
[…]是的,对。我已经停止了对第一个错误的调查:)谢谢你们,但似乎fseek需要文件指针作为第一个参数,但这里我使用integer(BATT_fd)来存储文件描述符。是否有任何方法可以让我在fseek中使用整数描述符,或者我应该将BATT_fd type更改为FILE*并将open、read和write更改为fopen、fread和fwrite?使用lseek then()同样,前面的if
逻辑不正确:它应该是if(ret_read
[…]是的,对。我已经停止了对第一个错误的调查:)谢谢你们,但似乎fseek需要文件指针作为第一个参数,但这里我使用integer(BATT_fd)来存储文件描述符。是否有任何方法可以让我在fseek中使用整数描述符,或者我应该将BATT_fd type更改为FILE*并将open、read和write更改为fopen、fread和fwrite?使用lseek then()同样,前面的if
逻辑不正确:它应该是if(ret_read
[…]是的,对。我已经停止了对第一个错误的调查:)谢谢你们,但似乎fseek需要文件指针作为第一个参数,但这里我使用integer(BATT_fd)来存储文件描述符。有没有办法让我可以在fseek中使用整数描述符,或者我应该将BATT_fd type更改为FILE*并将open、read和write更改为fopen、fread和fwrite?然后使用lseek()
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
#define BUF_SIZE 128
int main(int argc, char* argv[])
{
int BATT_fd, ret_write, ret_read, i;
char buffer[BUF_SIZE];
if(argc != 2)
{
printf ("\nUsage: cp file1 file2\n");
return 1;
}
BATT_fd = open (argv [1], O_RDWR | O_CREAT, S_IRWXU);
if (BATT_fd == -1)
{
perror ("open");
return 2;
}
printf("\n file opened successfully with file desc %d\n", BATT_fd);
printf("enter data into file\n");
scanf("%[^\n]", buffer);
if((ret_write = write (BATT_fd, &buffer, BUF_SIZE)) == 0)
{
printf("nothing is write");
}
else if((ret_write = write (BATT_fd, &buffer, BUF_SIZE)) == -1)
{
printf("write error");
}
else
{
printf("wrote %d characters to file\n", ret_write);
printf("address writeen is %x\n", buffer[i]);
}
if((ret_read = read(BATT_fd, &buffer, BUF_SIZE)) > 0)
{
perror("read");
return 4;
}
else
{
while((ret_read = read (BATT_fd, &buffer, BUF_SIZE)) > 0)
{
fwrite(buffer, 1, ret_read, stdout);
}
}
close (BATT_fd);
return 0;
}