小编drl*_*exa的帖子

多个进程写入同一个文件(C)

有一个程序(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)

c fork

6
推荐指数
1
解决办法
1万
查看次数

Perl,禁用缓冲输入

有一个文件:

:~$ 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)

perl buffering

6
推荐指数
1
解决办法
2157
查看次数

标签 统计

buffering ×1

c ×1

fork ×1

perl ×1