Tag: io

C – 将结构写入文件(.pcap)

我正在尝试编写.pcap文件,这可以在Wireshark中使用。 为了做到这一点,我有几个结构,我需要写入文件的各种数据类型。 (见代码) 所以,我创建结构实例,填写数据,使用FILE * fp = fopen(“test.pcap”,“w”),然后我不确定如何正确地将它写入文件。 我相信我应该使用memcpy,但我不确定最好的方法。 我过去主要使用C ++库来执行此操作。 有什么建议? typedef struct pcap_hdr_s { uint32_t magic_number; /* magic number */ uint16_t version_major; /* major version number */ uint16_t version_minor; /* minor version number */ int32_t thiszone; /* GMT to local correction */ uint32_t sigfigs; /* accuracy of timestamps */ uint32_t snaplen; /* max […]

关于getchar()循环如何在内部工作的困惑

我已经在下面使用getchar()包含了一个示例程序,供参考(并不是任何人可能需要它),如果您愿意,可以随意解决它的问题。 但我的问题是: 程序调用getchar()时究竟发生了什么 ? 以下是我的理解(请澄清或纠正我): 调用getchar时,它会检查STDIN缓冲区以查看是否有任何输入。 如果没有任何输入,getchar会睡觉。 唤醒后,getchar会检查是否有任何输入,如果没有,则让它自己再次进入睡眠状态。 重复步骤2和3,直到有输入。 一旦有输入(按照约定在结尾处包含’EOF’),getchar返回此输入的第一个字符并执行某些操作以指示下一次调用getchar应该从同一缓冲区返回第二个字母? 我不太确定那是什么。 当除了EOF之外没有其他字符时,getchar是否会刷新缓冲区? 我使用的术语可能不太正确。 #include int getLine(char buffer[], int maxChars); #define MAX_LINE_LENGTH 80 int main(void){ char line[MAX_LINE_LENGTH]; int errorCode; errorCode = getLine(line, sizeof(line)); if(errorCode == 1) printf(“Input exceeded maximum line length of %d characters.\n”, MAX_LINE_LENGTH); printf(“%s\n”, line); return 0; } int getLine(char buffer[], int maxChars){ int […]

scanf无法正常工作。 需要从控制台读取双倍

我不确定我做错了什么,但我无法从控制台读取双重内容。 读它因某种原因工作正常。 我正在使用Xcode。 double n1; // get input from the user printf(“Enter first number: “); scanf(“%f”, &n1); printf(“%f”, n1); 无论我输入什么,这将始终打印0。

在C中获取用户输入的最简单方法是什么?

似乎有很多方法可以在C中获得用户输入。 什么是最简单的方法,需要很少的代码? 基本上我需要显示这个: Enter a file name: apple.text 基本上我需要询问用户文件名。 所以我需要一些能够获得用户输入的单词的东西。

C读取(来自stdin)停止在0x1a字符处

目前我正在为原始数据(如jpg等)实现Burrows-Wheeler变换(和逆变换)。 在对文本文件等普通数据进行测试时,不会出现问题。 但是当谈到读取jpg文件时,例如它停止读取字符0x1a又称替换字符。 我一直在互联网上搜索没有采用OS依赖代码但没有结果的解决方案…我想在二进制模式下读取stdin,但我觉得这并不容易。 有没有简单的方法来解决这个问题? 码: buffer = (unsigned char*) calloc(block_size+1,sizeof(unsigned char)); length = fread((unsigned char*) buffer, 1, block_size, stdin); if(length == 0){ // file is empty }else{ b_length = length; while(length == b_length){ buffer[block_size] = ‘\0’; encodeBlock(buffer,length); length = fread((unsigned char*) buffer, 1, block_size, stdin); } if(length != 0){ buffer[length] = ‘\0’; encodeBlock(buffer,length); } […]

MPI IO读写块循环矩阵

我有一个学校项目在hpc分布式系统上进行矩阵乘法。 我需要从并行IO系统读取矩阵并使用pblacs在许多计算节点(处理器)上并行执行矩阵乘法。 必须使用MPI IO命令读取数据。 我知道PBlacs使用块循环分布来执行乘法。 教授没有向我们提供有关MPI IO的更多信息,而且我很难在其上找到更多的信息/资源。 具体来说,是否有方法以块循环方式从并行io系统中读取矩阵并轻松将其插入到pblacs pdgemm中? 任何指向有用资源的指针都会非常感激。 我的时间有点短暂,对这个项目缺乏方向感到沮丧。

整洁的异步IO代码

虽然异步IO(带有select / poll / epoll / kqueue等的非阻塞描述符)不是Web上记录最多的东西,但是有一些很好的例子。 但是,所有这些示例在确定了调用返回的句柄后,只有一个’ do_some_io(fd) ‘存根。 它们并没有真正解释如何在这种方法中最好地接近实际的异步IO。 阻止IO非常整洁,直接读取代码。 另一方面,非阻塞,异步IO是毛茸茸的,凌乱的。 有什么办法? 什么是健壮和可读的? void do_some_io(int fd) { switch(state) { case STEP1: … async calls if(io_would_block) return; state = STEP2; case STEP2: … more async calls if(io_would_block) return; state = STEP3; case STEP3: … } } 或者(ab)使用GCC的计算得到: #define concatentate(x,y) x##y #define async_read_xx(var,bytes,line) \ concatentate(jmp,line): […]

freopen()等效于c ++流

当使用c风格的i / o进行编程时,我有时会使用freopen()来重新打开stdin以进行测试,这样我就不必一遍又一遍地重新输入输入。 我想知道是否有相当于c ++的i / o流。 此外,我知道我可以使用管道在命令行/终端/无论如何重定向它,但我想知道是否有办法在我的代码中执行它(因为你可以看到,我不是很了解CL / T / W)。

C – 使用fopen,fclose,fputc等

我已经让这段代码最终在我的命令行上使用了一个参数,即一个文件供它使用,尽管我设计的代码的概念是使用无限数量的文件。 它的作用是使用包含以空格分隔的单词的X个文本文件,并用\n替换空格,从而创建单词列表。 虽然,它成功地完成了第一个参数,但它只是忽略了第二个参数。 另一个小问题似乎是它最后还打印出一些垃圾信,Y上面有两个点; 我假设一些EOF符号,但我似乎无法阻止这种情况发生! int main(int argc, char** argv) { FILE *fpIn, *fpOut; int i, j; j = 1; char c; char myString[256]; printf(“%d”, argc); printf(“\n”); printf(“The following arguments were passed to main(): “); for(i=1; i<argc; i++) printf("%s ", argv[i]); printf("\n"); while(argc–) { for(i = 1; i < argc; i++) { fpIn = fopen(argv[j], […]

fgets()的返回值

我刚刚开始在C使用I/O 这是我的问题 – 我有一个文件,我从中读取了我的输入。 然后我使用fgets()来获取缓冲区中的字符串,我以某种方式使用它。 现在,如果输入对于缓冲区而言太短,即如果fgets()的第一次读取达到EOF ,会发生什么。 fgets()应该返回NULL (正如我在fgets()文档中读到的那样)? 它似乎没有,我得到了正确的输入。 除了我的feof(input)并没有说我们已经达到了EOF 。 这是我的代码片段。 char buf[BUFSIZ]; FILE *input, *output; input = fopen(argv[–argc], “r”); output = fopen(argv[–argc], “w”); /** * If either of the input or output were unable to be opened * we exit */ if (input == NULL) { fprintf(stdout, “Failed to open file – […]