C编程打印一定量的字节屏 [英] C programming print a certain amount of bytes to screen

查看:131
本文介绍了C编程打印一定量的字节屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎样才能使程序读取的字节partSize量并将其打印到屏幕上?比方说,我打开包含在总共100个字符的文本文件。如果partSize是50个字节,我希望50要打印的字符在屏幕上。

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&fcntl.h GT;
#包括LT&;&unistd.h中GT;
#包括LT&; SYS / stat.h>
#包括LT&; SYS / types.h中>
#包括LT&;&errno.h中GT;#定义PERMS 0777INT主(INT ARGC,CHAR *的argv [])
{
    INT createDescriptor;
    INT openDescriptorOriginal;
    INT closeCreateDescriptor;    // CHAR fileNameOriginal [] =picture.jpg;
    CHAR fileNameOriginal [] =MYFILE.TXT;    INT部分;
    INT partSize;    份= 2;    INT bytesRemaining;
    INT部分号码;
    字符缓冲区[512];
    INT readDescriptor;    如果((openDescriptorOriginal =开(fileNameOriginal,O_RDONLY))== -1)
    {
        的printf(错误打开%S,fileNameOriginal);
        出口(EXIT_FAILURE);
    }    结构统计BUF;
    INT R = FSTAT(openDescriptorOriginal,&安培; BUF);
    如果(r)的
    {
        fprintf中(标准错误,错误:FSTAT:%S \\ n,(字符*)字符串错误(错误));
        出口(1);
    }    INT originalFileSize = buf.st_size;
    的printf(该文件%.9f千字节大\\ n,(双)originalFileSize / 1024);    partSize =((ori​​ginalFileSize +份)+ 1)/份;    //我停留在这部分
    而((readDescriptor =读(openDescriptorOriginal,缓冲剂,partSize))≤; partSize))
    {
        写(1,缓冲,readDescriptor);
    }    如果((closeCreateDescriptor =关闭(openDescriptorOriginal))== -1)
    {
        的printf(错误收盘文件\\ n);
    }    返回0;
}


解决方案

您需要检查返回值,并更新每个迭代的长度:

  ssize_t供算,总;
总= 0;
字符* BUF = BUFFER;
而(partSize){
    数=读(openDescriptorOriginal,BUF,partSize);
    如果(计数℃,){
        / *处理错误* /
        打破;
    }
    如果(计数== 0)
        打破;
    BUF + =计数;
    总+ =计数;
    partSize - =计数;
}
写(1,缓冲液,总);

将包含读取的字节数。

How can I make the program read "partSize" amount of bytes and print it to the screen? Let's say that I am opening a text file that contains 100 characters in total. If partSize is 50 Bytes, I would expect 50 characters to be printed to the screen.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h> 
#include <sys/types.h> 
#include <errno.h>

#define PERMS 0777

int main(int argc, char *argv[])
{
    int createDescriptor;
    int openDescriptorOriginal;
    int closeCreateDescriptor;

    //char fileNameOriginal[] = "picture.jpg";
    char fileNameOriginal[] = "myFile.txt";

    int parts;
    int partSize;

    parts=2;

    int bytesRemaining;
    int partNumber;
    char BUFFER[512];
    int readDescriptor;

    if ((openDescriptorOriginal = open(fileNameOriginal, O_RDONLY )) == -1)
    {
        printf("Error opening %s", fileNameOriginal);
        exit(EXIT_FAILURE);
    }

    struct stat buf;
    int r = fstat(openDescriptorOriginal, &buf);
    if (r)
    {
        fprintf(stderr, "error: fstat: %s\n", (char *) strerror(errno));
        exit(1);
    }

    int originalFileSize = buf.st_size;
    printf("The file is %.9f Kilobytes large.\n", (double) originalFileSize/1024);

    partSize = ((originalFileSize + parts) + 1)/parts;

    //I am stuck at this part
    while ((readDescriptor = read(openDescriptorOriginal, BUFFER, partSize)) < partSize))
    {
        write(1, BUFFER, readDescriptor);
    }

    if ((closeCreateDescriptor = close(openDescriptorOriginal)) == -1)
    {
        printf("Error closing file.\n");
    }

    return 0;
}

解决方案

You need to check the return value, and update the length in each iteration:

ssize_t count, total;
total = 0;
char *buf = BUFFER;
while (partSize) {
    count = read(openDescriptorOriginal, buf, partSize);
    if (count < 0) {
        /* handle error */
        break;
    }
    if (count == 0)
        break;
    buf += count;
    total += count;
    partSize -= count;
}
write (1, BUFFER, total);

total will contain the number of bytes read.

这篇关于C编程打印一定量的字节屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆