#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); }