2016-09-15 1 views
-1

Как реализовать один поток ввода-вывода в C? т. Е. A> b
Код ниже не передает текст из input.txt в output.txt, как я этого хочу.Как реализовать input.txt> output.txt в C

#include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/wait.h> 
#include <unistd.h> 

int main(void) 
{ 
     int fd = open("/home/ubuntu/workspace/file2.txt", O_WRONLY|O_CREAT); 
     if (fd < 0) 
     { 
      fprintf(stderr, "Failed to open file2.txt for writing\n"); 
      return(EXIT_FAILURE); 
     } 
     dup2(fd, 1); 
     close(fd); 
     execlp("a.out", "a.out", "file1.txt", NULL); 
} 
+4

Что делает код для 'a.out' do? Каково текущее поведение вашей программы? Я предлагаю вам проверить, действительно ли «excelp» преуспел или нет. Обычно текущий каталог ('.') не находится в PATH. Таким образом, попытка exec 'a.out' в этом случае потерпит неудачу. – kaylum

+0

Попробуйте использовать 'cat' вместо' a.out'. – Barmar

+1

Зачем вам нужно это делать с помощью 'execlp()'? Вы можете просто написать простой цикл в C, который читается из 'file1.txt' и записывается в файл' file2.txt'. – Barmar

ответ

2

Если вы не вынуждены использовать exec вы можете использовать простой код, который будет записывать file1.txt на указанный выходной файл:

#include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

#define BUFFSIZE 10240 

int main(int argc, char *argv[]) { 
    int n, t, i; 
    char buf[BUFFSIZE]; 
    t = open("file1.txt", O_RDONLY); 

    while ((n = read(t, buf, BUFFSIZE)) > 0) { 
     if (write(STDOUT_FILENO, buf, n) != n) { 
      perror("Write Error"); 
     } 
    } 
    if (n < 0) { 
     perror("Read Error"); 
    } 
    if (close(t) == -1) { 
     perror("Closing Error"); 
    } 

    exit(0); 
} 

Test

./a.out a > c 

[email protected] ~/C/twodec> more c 
foo bar 
bletch 
blahonga 
+1

Я не думаю, что это делает некоторые вроде: file1.txt> file2.txt, а скорее (некоторый текст)> someFile.txt. Я пытаюсь отправить данные из одного файла в другой. – jinan

+0

Я решил подобные проблемы. Вы можете взглянуть на мой Open Source C, если вам нравится https://github.com/montao/openshell. У меня также есть пример с базовым конвейером: https://github.com/montao/pipeline. Вы можете взять этот код и используйте любой способ, который вам нравится. Наш герой Джонатан Леффлер помог нам написать его. –

 Смежные вопросы

  • Нет связанных вопросов^_^