我想使用多线程复制多个文件。这在错误中结束:* 分段错误 *,无法判断是哪里。
我尝试了:print("test");
在不同的行,但给我同样的错误。我认为主要的功能是正确的,在start_routine()
块的东西。
验证码:
typedef struct filePair
{
char srcName[100];
char dstName[100];
} filePair;
void * start_routine(void *arg) //file handling using system calls
{
char tmp;
printf("Copying %s to %s.\n", ((filePair *)arg)->srcName, ((filePair *)arg)->dstName);
int src = open(((filePair *)arg)->srcName, O_RDWR); //open source file
if (!src)
{
printf("Cannot open source file.\n"); //error handling
exit(0);
}
//open dst file
int dst = open(((filePair *)arg)->dstName, O_WRONLY | O_CREAT, 0641);
if (!dst)
{
printf("Error in destination file.\n"); //error handling
exit(0);
}
while (read(src, &tmp, 1)) //while loop to copy contents
write(dst, &tmp, 1);
close(src); //close src and dst files
close(dst);
return NULL;
}
//main function...
2条答案
按热度按时间tf7tbtn21#
该类型的名称是
struct filePair
。使该类型的用法更短的常见方法是合并typedef
:然后,您可以参考
filePair
类型。wfveoks02#
1.代码中分段错误的原因是指针使用不当,创建filePair类型的指针,如果没有为这些指针分配足够的内存,就会导致分段错误,如果我们为这些指针分配足够的内存,就不会有问题了。
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
在pthread_create()中传递 * file 1之前,我们应该将file 1指针类型转换为(void *)。
这里我提供了一个简单的版本,不使用filePair的指针,而是使用filePair示例。