2010-11-29 6 views
0
#include <unistd.h> 
#include<stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <stdlib.h> 
#include <string.h> 
#include <pthread.h> 

int main (int argc, char * argv[]) 
{ 
    int enteroParaElPipe; 
    int IDPROGRAMACLIENTE=getpid(); 
    printf("%d",IDPROGRAMACLIENTE); 

    if((mkfifo("pipe",0666))==-1) 
    { 
     perror("error creating pipe, type 1"); 
     exit(1); 
    } 

    if((enteroParaElPipe=open("pipe",O_WRONLY))==-1) 
    { 
     perror("error creating pipe, type 2"); 
     exit(1); 
    } 

    char comando[200]; 

    if(scanf("%199s", comando) == 1) 
     puts(comando); 

    int written; 
    escritos=write(enteroParaElPipe,"HOLA\n",5); 
    printf("Written: %d\n",written); 
    close(enteroParaElPipe); 

    return 0; 
} 

私が取得:このパイプには何が問題なのですか?このコードを実行しようとすると

error creating pipe: Invalid argument 

なぜ?

(追加された最初の回答に基づいて修正)

+0

は、なぜあなたは 'mkfifo'にPIDを渡していますか?また、さまざまなエラーケースに対して異なるメッセージを使用して、どのエラーが発生したかを知ることができます。 –

+0

コードのフォーマットは恐ろしいものでした。私はそれを少し改良し、それはまだ醜いです。人々があなたのコードを理解してもらいたいのですか?あなたができることはフォーマットすることです。 – abelenky

+0

@abelenky:はい、申し訳ありません。無関係な無関係な部分を取り出しました。 – andandandand

答えて

1

mkfifoの2番目の引数は、fifoのアクセス権を表すmode_tです。

試してみてください。mkfifo("pipe", 0666);

2

なぜあなたははmkfifoのための第二引数としてgetpid()を渡していますか?

第2引数は、FIFOファイルの権限と同じモードです。詳細についてはman 3 mkfifoを入力してください!

乾杯。

+0

@omgzor: '0600'は、2番目の引数として渡したいものです。 – caf

+0

私は0600と0666の両方で試しましたが、同じエラーがありました – andandandand

+0

同じですか?無効な引数? Uhm、...そのディレクトリにアクセス権がありますか? FIFOをサポートするファイルシステムについて話していますか? (例えば、FAT32システムはそうしないだろう)。 – slezica

関連する問題