Проблема с использованием read () для записи содержимого файла на экран и в другой файл в C - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь скопировать содержимое файла в другой файл. Я также хочу отобразить содержимое файла на экране, и я хочу сделать все это, используя системные вызовы (запись), если это возможно.

Это мой код

#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

#define PERMS 0644

char *workfile = "file1.txt";
char *workfile2 = "file2.txt";
int main(int argc, char *argv[])
{
    int fd;
    int fd2;
    int fd3;
    ssize_t nread0;
    ssize_t nread;
    char buf[1024];
    char buf2[1024];
    ssize_t nread2;

    const char msg[] = "File 3 contains:";
    if ((fd= open(workfile, O_RDWR,PERMS)) == -1) {
        printf("Couldn't open %s\n", workfile);
        exit(1);
    }

    if ((fd2 = open(workfile2,O_RDWR,PERMS)) == -1) {
        printf("Couldn't open %s\n",workfile2);
        exit(1);
    }

    while (nread =read(fd,buf,1024)) {
        if (lseek(fd2,0,SEEK_END) < 0) return 1;
        if (write(fd,buf,nread) && write(1,buf,nread) < nread) {
            close(fd);
            close(fd2);
            return(-3);
        }
    }

    close(fd);
    if (nread ==-1) {
        return (-4);
    }
    return 0;
}

Когда я пытаюсь записать и на экран, содержимое file1 не копируется в file2, а содержимое file1выводятся на экран.

Я также попытался добавить read и write вне цикла while с отдельным буфером и ssize_t.

Что вызывает этовопрос

1 Ответ

1 голос
/ 06 октября 2019

В этой строке я думаю, что вы хотите fd2 написать в файл копии.

Также обратите внимание на приоритет оператора, < имеет более высокий приоритет, чем &&. Оберните вызовы write в скобках, чтобы оценить их перед сравнением с оператором <.

   if((write(fd2,buf,nread) && write(1,buf,nread)) < nread )
...