2013-09-30 74 views
0

我想發送一個字符串到另一個程序 但我有問題使用O_WRONLY | O_NONBLOCK, 如果我用O_RDWR代替它,程序工作正常 但我想知道是否有方法發送/讀取 字符串而不使用O_RDWR。現在它由於某種原因返回空字符串 。使用命名管道發送兩個程序之間的字符串

編劇:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <fcntl.h> 

#define MAX_LINE 1024 

int main(int argc, char **argv) 
{ 
    char line[MAX_LINE]; 
    int pipe; 
    printf("Enter line: \n"); 
    fgets(line, MAX_LINE, stdin); 
    pipe = open("link1", O_WRONLY | O_NONBLOCK); 
    write(pipe, line, strlen(line)); 
    system("./run"); //executing the reader 
    close(pipe); 
    return 0; 
} 

讀者:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <fcntl.h> 

#define MAX_BUF 1024 

int main(int argc, char **argv) 
{ 
    int fd; 
    char * link1 = "link1"; 
    char buf[MAX_BUF]; 
    fd = open(link1, O_RDONLY | O_NONBLOCK); 
    read(fd, buf, MAX_BUF); 
    printf("%s\n", buf); 
    close(fd); 
    return 0; 
} 
+2

please:檢查讀/寫的返回值,然後更新問題 – INS

+0

還檢查'open'的返回值(0表示錯誤)。無論如何,看起來你需要首先啓動你的閱讀器,然後再嘗試打開它來寫作。 – ChrisWue

+0

-1意味着'open'的錯誤。 0是一個有效的文件描述符 – Duck

回答

3

你是第一次運行該閱讀器?如果在寫入器嘗試將其打開時沒有進程打開讀取FIFO,則打開將失敗。

Open Group man page

當打開一個FIFO與O_RDONLY或O_WRONLY設置:如果設置了O_NONBLOCK: 一個開放的()爲只讀將返回刻不容緩。如果當前沒有進程打開文件讀取,則僅用於寫入的open()將返回錯誤。

相關問題