有一个程序(Ubuntu 12.04 LTS,单核处理器):
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/types.h>
int main(){
mode_t mode = S_IRUSR | S_IWUSR;
int i = 0, fd, pid;
unsigned char pi1 = 0x33, pi2 = 0x34;
if((fd = open("res", O_WRONLY | O_CREAT | O_TRUNC, mode)) < 0){
perror("open error");
exit(1);
}
if((pid = fork()) < 0){
perror("fork error");
exit(1);
}
if(pid == 0) {
if(write(fd, &pi2, 1) != 1){
perror("write error");
exit(1);
}
}else{
if(write(fd, &pi1, 1) != 1){
perror("write error"); …Run Code Online (Sandbox Code Playgroud) 有一个文件:
:~$ cat fff
qwerty
asdf
qwerty
zxcvb
Run Code Online (Sandbox Code Playgroud)
有一个脚本:
:~$ cat 1.pl
#!/usr/bin/perl
print <STDIN>
Run Code Online (Sandbox Code Playgroud)
该命令按预期工作:
:~$ cat fff | perl -e 'system("./1.pl")'
qwerty
asdf
qwerty
zxcvb
Run Code Online (Sandbox Code Playgroud)
但是此命令将无法按预期工作:第一个<STDIN>读取所有数据,而不是单行.如何禁用<STDIN>的缓冲?
:~$ cat fff | perl -e '$_ = <STDIN>; system("./1.pl")'
:~$
Run Code Online (Sandbox Code Playgroud)