Tag: io

编写PNM P6的问题

我正在编写一个程序,它接收两个重复的PNM P6文件,将第一个文件的内存放入缓冲区,在其上创建一条黄色对角线,并将结果写入第二个文件。 当我运行它时,输出文件已损坏,无法显示。 我注意到在查看输出时它缺少应该位于顶部的三行: P6 1786 1344 255 我不知道如何以编程方式确保这些行保留在代码中 – 我无法弄清楚为什么它们甚至首先被覆盖。 当我手动将这些行添加到输出时,该文件不再被破坏。 但是,没有出现黄色对角线。 这是同一个问题的一部分,还是我还应该考虑修复其他问题? 我的代码: #include #include #include typedef struct { unsigned char red, green, blue; } iPixel; typedef struct { int x, y; iPixel *data; } Image; Image * ReadImage(char *filename) { FILE *f = fopen(filename, “rb”); Image *img = NULL; char magicNum[128]; int […]

如何计算文件中的数字?

这是错误的。 我的代码出了什么问题? #include “stdafx.h” #include “stdlib.h” #include “ctype.h” int _tmain(int argc, _TCHAR* argv[]) { FILE* input; int num; int numCount = 0; input = fopen(“123.txt”, “r”); if (!input) { printf(“No file \a\n”); exit (101); } while ((fscanf(input, “%d”, &num)) == 1) printf(“%d”, num); if (isdigit(input)) numCount++; printf(“number count: %d”, numCount); return 0; }

在C中重定向到输入/输出的语法(UNIX)

我试图找到一种语法,让我在使用mkfifo()函数并使用fork创建子进程后,将标准输入输出重定向到命名管道。 我应该在哪个手册页面查看语法? 谢谢,亚伦

`read()`可以直接跟在`read()`和`read()`之间的`read()`吗?

在C标准库中,输出不能跟随输入,反之亦然。 对于Linux API, read()可以通过read()直接后跟write()和write() read()吗? 如果是,为什么Linux API和C库IO API之间存在这样的差异? 谢谢。

scanf等效于c中的箭头键支持

c中是否有一些函数表现得像scanf(从键盘输入),同时能够通过按箭头键在输入中移动光标,就像在终端中一样?

C中更快IO的其他选择是什么?

我实现了合并排序,并将其用作此codechef问题的解决方案。 这是提交的内容 。 代码放在下面。 我认为导致执行缓慢的问题是我的IO在main函数中很慢。 我知道输入的元素数量,因此必须有一些更快的方式来读取输入而不是我正在做的方式。 是否有更快的IO方法而不是我在main函数中使用的方法? 我听说过使用buffer, fgets和sscanf但我不知道它们是否更快。 任何代码示例都会有所帮助。 #include #include void merge_parts(int arr[], int length) { int *ans; int i, j, k; int temp = length/2; ans = malloc(sizeof(int) * length); //This while and next if-else puts the merged array into temporary array ans for (j = temp, i = k = 0; […]

多个xterm伪终端仅用作多个线程的输出

我一直在努力从我的程序中启动几个线程,我希望每个线程输出到各自的终端窗口(我已经以平铺模式弹出)。 它们不是炮弹,只是输出的终端窗口。 我正在用C编写ubuntu。我有它工作,但由于某种原因,几分钟之后就好像xterm显示缓冲区填满(彼此独立)并且它们停止显示新文本。 旧文本仍然存在,线程在后台继续做他们的事情,但没有新的输出。 我已经尝试了所有我能找到的东西并且仍然感到困惑。 我似乎找不到可能的: 缓冲区我需要刷新或清除 一种清除屏幕的方法(即使在我重定向输入或尝试将它们作为输出发送到xterm之后,那些VT转义码也什么都不做) 一种将光标重新定位在终端窗口左上角的方法 一种重置我指向适当的/ dev / pts的文件描述符的方法 以下是它现在的情况(也请随意指出我正在做的任何多余或错误;在这种情况下,NB可移植性并不是非常重要)。 我省略了错误检查。 我希望我不必使用system(),但这是我可以使它工作的唯一方法(posix_spawn也没有工作)。 此代码在每个线程中运行(未显示切片效果,但它通过共享内存和xterm命令行上的一些其他参数进行管理): char buf_xt[256]; // Used along with sprinf() and write() to output to xterm char *pSptyName; int xterm_fd1; // File descriptor for xterm xterm_fd1 = posix_openpt(O_RDWR | O_NONBLOCK | O_NOCTTY); pSptyName = ptsname(xterm_fd1); sprintf(buf_xt, “xterm -S%s/%d &”, pSptyName, xterm_fd1); […]

为什么fgets没有输入第一个值?

我正在编写一个程序来快速编写我的html文件。 当我来写我的页面内容时,我遇到了问题。 #include int main() { int track; int question_no; printf(“\nHow many questions?\t”); scanf(“%d”,&question_no); char question[question_no][100]; for(track=1;track<=question_no;track++) { printf("\n%d. “,track); printf(“\nQuestion number %d.\t”,track); fgets(question[track-1],sizeof(question[track-1]),stdin); printf(“\n\n\tQ%d. %s “,track,question[track-1]); } } 在这个程序中,我正在写一些问题及其答案(在html文件中)。 当我测试运行这个程序时,我将question_no的值输入到3.但是当我输入我的第一个问题时,它没有question[0] ,因此第一个问题没有输出。 其余的问题输入没有问题。 我在stackoverflow上搜索了一些问题,发现fgets()查找最后的\0字符,并且\0停止它。 我还发现我应该使用缓冲区通过fgets()输入,所以我使用: setvbuf和setbuf但也没有用(我可能编码错了)。 在我的第一个和最后一个(以及) scanf语句之后我也使用了fflush(stdin)从stdin中删除任何\0字符,但这也没有用。 有没有办法接受fgets()的第一个输入? 我现在正在使用stdin和stdout。 我不访问,读取或写入任何文件。

C编程中的Hex文件读取?

我有一个问题: 我正在编写的ac程序,其function与hex编辑器非常相似。 我想接收一个文件并查看其hex值。 例如,假设我的文本文件“helloworld.txt”只有“Hello World!”字样。 在其中,我想指定程序获取该文件,读取其hex值(同样该文件是一个简单的.txt文件,而不是二进制文件)并将其存储在一个数组中供以后使用。 这是我到目前为止: #include #include int main() { char ch, file_name[25]; FILE *fp; printf(“Enter the name of file you wish to see\n”); gets(file_name); fp = fopen(file_name,”rb”); // read binary mode if( fp == NULL ) //error checking { perror(“Error while opening the file.\n”); exit(EXIT_FAILURE); } printf(“The contents of %s file are […]

在C中提高文件IO的性能

在对它们执行堆操作之后,我需要逐个将大量的整数写入文件。 我试图将排序的文件合并到一个文件中。 截至目前,我正在每次操作后写入文件。 我使用min heap来合并文件。 我的问题是 – 执行文件写入时,每次写入文件或一次写入多块内存块时是否访问磁盘? 如果我将在大小为1024的数组中输出堆,或者可能更多,然后立即执行写操作,它会改善性能吗? 先感谢您。 编辑 – 将使用setbuffer()帮助? 我认为它应该在某种程度上有所帮助。