Отправка одной буквы с использованием каналов на языке Си

#c

Вопрос:

Я пытаюсь отправить строку с помощью канала от родителя к потомку по одному символу за раз. Для этого я передаю этот символ в инструкцию write, используя цикл for следующим образом :

 for(int j=0; j<strlen(str); j  ){
    write(fd[WRITE_END], str[j], BUFFER_SIZE);
}
 

Однако код не компилируется успешно и показывает следующее:

 warning: passing argument 2 of ‘write’ makes pointer from integer without a cast [-Wint-conversion]
write(fd[WRITE_END], str[j], BUFFER_SIZE);
 

и

 note: expected ‘const void *’ but argument is of type ‘char’
 extern ssize_t write (int __fd, const void *__buf, size_t __n) __wur;
 

Что я сделал не так?
Разве невозможно отправлять отдельные символы с помощью каналов?

Любая помощь будет признательна.

Ответ №1:

Пожалуйста, обратитесь к документации для «write()»:

https://man7.org/linux/man-pages/man3/write.3p.html

 #include <unistd.h>

ssize_t pwrite(int fildes, const void *buf, size_t nbyte,
           off_t offset);
ssize_t write(int fildes, const void *buf, size_t nbyte);
 

Другими словами, если вы хотите написать один символ, вам нужно:

  • Укажите адрес этого символа и
  • Укажите «один байт».:
     for(int j=0; j<strlen(str); j  ){
      write(fd[WRITE_END], amp;str[j], 1);
    }