Вы сказали, что "дочерний процесс не должен каким-либо образом использовать аргументы для main ()". Однако я вижу, что ваш дочерний процесс использует argc
. Разве это не побеждает ваше ограничение?
Вы также говорите, что хотите «один вызов написать для каждого символа». Ваша текущая реализация использует один вызов для записи для каждого аргумента, а не для каждого символа. Это была опечатка? Если нет, вы захотите использовать что-то вроде этого:
char nul='\0', endl='\n';
for (a=1; a < argc; ++a) {
for (c=0; c < strlen(argv[a]); ++c) {
write(fdest[1], &argv[a][c], 1);
}
write(fdest[1], &nul, 1);
}
write(fdest[1], &endl, 1);
Это будет писать по одному символу за раз, с каждым аргументом в виде строки с нулевым символом в конце и символом новой строки в конце. Новая строка используется только в качестве маркера, указывающего, что больше нет данных для отправки (и безопасно использовать, поскольку вы не будете передавать новую строку в аргументе CLI).
Дочерний процесс просто должен быть циклом, который читает входящие байты один за другим и увеличивает счетчик, если байт не равен '\0'
или '\n'
. Когда он читает символ новой строки, он выходит из цикла обработки ввода и сообщает значение счетчика.