【发布时间】:2017-11-19 01:22:01
【问题描述】:
我在使用read()、write() 和open() 将文件复制到新目录时遇到问题。我可以使用open() 创建一个新文件,并且可以使用write() 写入终端,但我假设如果我将int 文件描述符从打开传递到写入,写入将写入指定文件。
除此之外,一旦我打开一个文件,权限都是很时髦的,我只能以 root 身份打开它。每次创建文件时,它都是空的,但我可以看到我刚刚读取的整个文件都打印在终端中。
我已经阅读了每个系统调用的 man 文件,但我仍然不明白这里的问题是什么。
这是我的代码:
void *scanFile( s_request *request )
{
//TODO Print out all struct variables.
pthread_mutex_lock(&mutex);
int readFileReference;
int writeFileReference;
int bufferSize = request->bufferSize;
int numberOfBytesRead = bufferSize;
int *buffer[bufferSize];
if ((readFileReference = open(request->file, O_RDONLY)) == -1)
{
printf("Failed to open file. Aborting.\n");
exit(EXIT_FAILURE);
}
if ((writeFileReference = open("newfile.txt", O_CREAT | O_APPEND | O_RDWR) == -1))
{
printf("Failed to open write file. Aborting.\n");
exit(EXIT_FAILURE);
}
while ((read(readFileReference, buffer, numberOfBytesRead)) != 0)
{
write(writeFileReference, buffer, bufferSize);
bzero(buffer, bufferSize);
}
pthread_mutex_unlock(&mutex);
}
修复了问题:
更新代码:
void *scanFile( s_request *request )
{
//TODO Print out all struct variables.
pthread_mutex_lock(&mutex);
int readFileReference;
int writeFileReference;
int bufferSize = request->bufferSize;
int numberOfBytesRead = bufferSize;
int *buffer[bufferSize];
if ((readFileReference = open(request->file, O_RDONLY)) == -1)
{
printf("Failed to open file. Aborting.\n");
exit(EXIT_FAILURE);
}
if ((writeFileReference = open("newfile.txt", O_CREAT | O_WRONLY, 0777)) == -1)
{
printf("Failed to open write file. Aborting.\n");
exit(EXIT_FAILURE);
}
while ((read(readFileReference, buffer, numberOfBytesRead)) != 0)
{
write(writeFileReference, buffer, bufferSize);
bzero(buffer, bufferSize);
}
close(writeFileReference);
close(readFileReference);
pthread_mutex_unlock(&mutex);
}
【问题讨论】:
-
您未能阅读
open的文档。创建文件时需要三个参数。 -
你说得对。谢谢@ZanLynx