Содержимое двух write()
не будет разделено;читатель просто читает их как один блок, объединяя две строки:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int main(void){
int out[2];
pipe(out);
char file1[1024],file2[1024];
int pid=fork();
if(pid>0){
close(out[0]);
scanf(" %s",file1);
scanf(" %s",file2);
write(out[1],file1,strlen(file1));
//write(out[1],"\0",1);
write(out[1],file2,strlen(file2));
}
if(pid==0){
int cnt=0;
close(out[1]);
cnt=read(out[0],file1,1024);
file1[cnt]=0;
cnt = read(out[0],file2,1024);
file2[cnt]=0;
fprintf(stderr, "about to execlp(sort|%s|%s|NULL)\n",file1,file2);
execlp("sort","sort",file1,NULL);
return 0;
}
return 0;
}
./a.out
ввод: wtf omg
Вывод:
plasser@pisbak$ ./a.out
wtf omg
about to execlp(sort|wtfomg||NULL)
plasser@pisbak$ sort: cannot read: wtfomg: No such file or director
Итак, сообщение не о том, что двоичный файл не найден, но sort не может найти файл wtfomg
, который был передан в качестве аргумента.