example.c
#include <stdio.h>
#include <stdlib.h>
// этот врап тут нужен
char *__wrap_read(const char *filename) {
FILE* file = fopen(filename, "r"
if (file == NULL) {
perror(filename);
return NULL;
}
if (fseek(file, 0, SEEK_END) != 0) {
fclose(file);
fprintf(stderr, "error: fseek"
return NULL;
}
long fileSize = ftell(file);
if (fileSize == -1L) {
fclose(file);
fprintf(stderr, "error: ftell"
return NULL;
}
rewind(file);
char* buffer = calloc(fileSize + 1, sizeof(char));
if (buffer == NULL) {
fclose(file);
printf("error: calloc\n"
return NULL;
}
fread(buffer, sizeof(char), fileSize, file);
fclose(file);
return buffer;
}
example.h
#ifndef _EXAMPLE_H
#define _EXAMPLE_H
char *read(const char *s);
#endif
main.c
#include <stdio.h>
#include <stdlib.h>
#include "example.h"
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
return -1;
}
char *p = read(argv[1]);
if (p == NULL)
return -2;
printf("`%s`", p);
free(p);
return 0;
}
gcc -c -o example.o example.c
gcc -shared -o example.dll example.o
gcc -o main main.c "-Wl,--wrap=read" -L. -lexample
Написал такую программу но вместо нужно результата она мне выдаёт просто
тест задания такой Создать динамическую библиотеку (dll или so) в которой будут два метода read(&lt;имя текстового файла&gt, который считывает информацию из файла и возвращает тип данных char[], и read(&lt;строка&gt;,&lt;имя текстового файла&gt, который является методом типа void и записывает строку в файл.
подскажите где я ошибся
#include <stdio.h>
#include <stdlib.h>
// этот врап тут нужен
char *__wrap_read(const char *filename) {
FILE* file = fopen(filename, "r"
if (file == NULL) {
perror(filename);
return NULL;
}
if (fseek(file, 0, SEEK_END) != 0) {
fclose(file);
fprintf(stderr, "error: fseek"
return NULL;
}
long fileSize = ftell(file);
if (fileSize == -1L) {
fclose(file);
fprintf(stderr, "error: ftell"
return NULL;
}
rewind(file);
char* buffer = calloc(fileSize + 1, sizeof(char));
if (buffer == NULL) {
fclose(file);
printf("error: calloc\n"
return NULL;
}
fread(buffer, sizeof(char), fileSize, file);
fclose(file);
return buffer;
}
example.h
#ifndef _EXAMPLE_H
#define _EXAMPLE_H
char *read(const char *s);
#endif
main.c
#include <stdio.h>
#include <stdlib.h>
#include "example.h"
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
return -1;
}
char *p = read(argv[1]);
if (p == NULL)
return -2;
printf("`%s`", p);
free(p);
return 0;
}
gcc -c -o example.o example.c
gcc -shared -o example.dll example.o
gcc -o main main.c "-Wl,--wrap=read" -L. -lexample
Написал такую программу но вместо нужно результата она мне выдаёт просто
тест задания такой Создать динамическую библиотеку (dll или so) в которой будут два метода read(&lt;имя текстового файла&gt, который считывает информацию из файла и возвращает тип данных char[], и read(&lt;строка&gt;,&lt;имя текстового файла&gt, который является методом типа void и записывает строку в файл.
подскажите где я ошибся