read()
,、およびopen()
を使用してファイルを新しいディレクトリにコピーする際に問題があります。私はopen()
で新しいファイルを作成することができ、write()
で端末に書き込むことができましたが、私はint
ファイルディスクリプタをオープンからライトに渡すと、指定したファイルに書き込みを行うという前提でした。ファイルをコピーするopen()、read()、write()システムコールの使用
さらに、ファイルを開くと、アクセス権はすべてファンキーで、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);
}
「オープン」のドキュメントを読んでいませんでした。ファイルを作成するには* 3つの引数が必要です。 –
そうです。ありがとう@ZanLynx –