Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未在终端中打印的文件内容_C_File_Fwrite - Fatal编程技术网

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;
}