📄 gossip.c
字号:
/**************************************************************** * TU Eindhoven, Eindhoven, The Netherlands, November 2003 * Author : Mathijs Visser * (Mathijs.Visser@student.tue.nl) * Purpose : Test transmission and reception between minimipses * on a 2-by-2 network. ****************************************************************/#include "mtools.h" /* Needed for: mprintf() */#include "stdcomm.h" /* Needed for: sc_receive() and sc_send() */#ifdef CC_I386 /*gcc on i386 */#include <stdio.h>#include <stdlib.h>#endif/* Enable the following line to generate extra info using mprintf(). */#define DEBUGint my_node_number;int rela_dest_addr;char received_str[18] = " ";char send_str[18] = "I know something!";#ifdef CC_I386 /* gcc on i386/PC */#define CHANGE_ENDIAN(value)\ ((( (value) & (unsigned long)(0x000000FF)) << 24) | \ (( (value) & (unsigned long)(0x0000FF00)) << 8) | \ (( (value) & (unsigned long)(0x00FF0000)) >> 8) | \ (( (value) & (unsigned long)(0xFF000000)) >> 24))int main(int argc, char* argv[]){ FILE *fi; /* Stream pointer of file containing node numbers and destinations.*/ /* Verify that the file "node_info.bin" exists.*/ fi = fopen("node_info.bin","rb"); if (fi == NULL) { fprintf(stderr, "ERROR: Could not open \"%s\"!\n", argv[0]); exit(1); }; fseek(fi, 0L, SEEK_END); /* determine file size: max node number is based on it. */ /* File opened successfully, check arguments.*/ if (argc != 2) { fprintf(stderr, "ERROR: Invalid usage!\n"); fprintf(stderr, "tip: Specify the node number of this node (0 up to %ld).\n", ftell(fi)/8-1); fclose(fi); exit(1); }; if (atoi(argv[1]) > ftell(fi)/8-1) { fprintf(stderr, "ERROR: No info for this node in \"%s\"!\n", argv[0]); fprintf(stderr, "tip: Specify the node number from 0 up to and including %ld.\n", ftell(fi)/8-1); fclose(fi); exit(1); }; fseek(fi, atoi(argv[1])*8, SEEK_SET); fread(&my_node_number, sizeof(int), 1, fi); my_node_number = CHANGE_ENDIAN(my_node_number); /* Convert from little endian to big endian */ fread(&rela_dest_addr, sizeof(int), 1, fi); rela_dest_addr = CHANGE_ENDIAN(rela_dest_addr); /* Convert from little endian to big endian */ fclose(fi);#else /*lcc on mMips */void main (void){ my_node_number = *((int *)0x00); rela_dest_addr = *((int *)0x04);#endif #ifdef DEBUG mprintf("\nNode %d up and running!\n", my_node_number); #endif if (my_node_number == 0x00) { /* First node sends first, listens thereafter.*/ sc_send(rela_dest_addr, send_str, 19); #ifdef DEBUG mprintf("I sent: \"%s\"\n", send_str); #endif sc_receive(received_str, 19); #ifdef DEBUG mprintf("I received:\"%s\"\n", received_str); #endif } else { /* This node waits for a message and then fowards it.*/ sc_receive(received_str, 19); #ifdef DEBUG mprintf("I received: \"%s\"\n", received_str); #endif sc_send(rela_dest_addr, received_str, 19); #ifdef DEBUG mprintf("Successfully forwarded the message.\n"); #endif }; #ifdef DEBUG mprintf("Let's call it a day!\n"); #endif #ifdef CC_I386 /* gcc on i386/PC */ return 0; #endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -