Я пытаюсь разблокировать дочерний элемент и написать ему структуру, но по какой-то причине запись не выполняется. Вот что я получил до сих пор:Написание структуры для дочернего сбойного канала
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
pid_t pid;
int pfd[2];
int rv;
if(pipe(pfd) == -1){
printf("Pipe failed\n");
}
struct t{
int count[26];
char array[4];
};
struct t st;
if((pid = fork()) < 0){
printf("Fork error\n");
}else if(pid == 0){
close(pfd[1]);
rv = read(pfd[0],st,sizeof(struct t));
printf("Read string: %d\n",rv);
}else{
int i = 0;
for(i = 0; i < 26; i++){
st.count[i] = i;
}
for(i = 0; i < 3; i++){
st.array[i] = 'A';
}
st.array[3] = '\0';
close(pfd[0]);
rv = write(pfd[1],st,sizeof(struct t));
printf("wrote: %d",rv);
close(pfd[1]);
}
}
Это убивало меня всю ночь. У меня есть подозрение, что это связано с тем, что я не полностью понимаю указатели на структуры. Я напечатал sizeof (struct t), который вернул 108 байтов (как и ожидалось), и я думал, что st был указателем на начало структуры, то есть команда записи начала бы там и записывать первые 108 байт, но, очевидно, это не так , Что мне не хватает?
Вам необходимо передать адрес 'st'. Измените параметр команды write на '& st'. –
Возвращаемое значение равно -1 при замене st на & st в команде записи –
Этот код не компилируется. Вы не замечаете этого и запускаете какую-то старую версию своей программы? Я это сделал. 'Write (..., st, ...)' должен давать 'несовместимый тип для аргумента 2 'write'' –