#include #include #include #include #include #include "dag_data_split.h" unsigned long int fib(unsigned long int n) { if (n <= 1) return n; return fib(n - 1) + fib(n - 2); } int main() { char buffer[1024]; // Buffer to store input data ssize_t bytes_read = read(0, buffer, sizeof(buffer)); if (bytes_read < 0) { perror("Error reading input"); return 1; } DataNode *dataList = splitData(buffer, bytes_read); if (dataList == NULL) { fprintf(stderr, "Failed to split data.\n"); return 1; } unsigned long int num1, num2; const char *firstdata = getDataNodeByIndex(dataList, 1); const char *seconddata = getDataNodeByIndex(dataList, 2); if (firstdata == NULL || seconddata == NULL) { fprintf(stderr, "Not enough data for two numbers.\n"); freeDataNodes(dataList); return 1; } if (sscanf(firstdata, "%lu", &num1) != 1 || sscanf(seconddata, "%lu", &num2) != 1) { fprintf(stderr, "Failed to parse the numbers correctly.\n"); freeDataNodes(dataList); return 1; } unsigned long int fib1 = fib(num1); unsigned long int fib2 = fib(num2); unsigned long int sum = fib1 + fib2; // Prepare output string char output[1024]; int len = snprintf(output, sizeof(output), "Fibonacci(%lu) + Fibonacci(%lu) = %lu + %lu = %lu\n", num1, num2, fib1, fib2, sum); // Write to stdout write(1, output, len); // �����ڴ� freeDataNodes(dataList); return 0; }