решаю задачу по реализации потока , а в нем копировании содержимого одного файла в другой.Программу написал,реализовал аргументы функции через структуру.Вроде бы все по фен-шуй..Но, во-первых,компилятор недоволен,во-вторых, при непосредственном запуске программы выдает ошибку с памятью..не понимаю в чем состоит ошибка.Как такового выделения памяти не нужно, т.к. создаю файлы(открываю) посредством системных вызовов.Так же, компилятор выдает несколько предупреждений1):
1. 32 line warning: passing argument 1 of ‘open’ makes pointer from integer without a cast [-Wintconversion]
2. note: expected ‘const char *’ but argument is of type ‘char’
3. 35 line warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]
4. 53 line warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
Исходник:
#include <stdio.h>
#include <pthread.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#define BUF_SIZE 4096
struct thread_arg
{
char* file, file2;
};
void * cp_sys (void * arg)
{
char buffer[BUF_SIZE];
struct thread_arg targ = *(struct thread_arg *) arg;
int in,out;
ssize_t bytes;
in = open( targ.file, O_RDONLY | O_CREAT );
if (in == -1)
{
fprintf(stderr,"Cannot open file %s\n", targ.file);
return NULL;
}
out = open( targ.file2, O_WRONLY | O_CREAT | O_TRUNC, 0640);
if ( out == -1 )
{
fprintf(stderr, "Cannot creat file %s\n", targ.file2);
return NULL;
}
while ((bytes = read ( in, buffer, BUF_SIZE)) > 0)
write (out , buffer, bytes );
close (in);
close (out);
return NULL;
}
int main (void)
{
pthread_t thread;
int result;
struct thread_arg targ;
targ.file = "file.in";
targ.file2 = "file.out";
result = pthread_create(&thread, NULL, &cp_sys, &targ);
while(1);
return 0;
}
Объясните,пожалуйста, в чем стоят ошибки данного кода. Заранее спасибо за ответ!!