C编程打印一定量的字节屏 [英] C programming print a certain amount of bytes to screen
本文介绍了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 =((originalFileSize +份)+ 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屋!
查看全文