linux C 从一个管道里读数据,但是不想被阻塞,这个管道的数据时有时无,求破!

linux C 从一个管道里读数据,但是不想被阻塞,这个管道的数据时有时无,求破!,第1张

创建管道的接口除了pipe以外,Linux还支持新接口pipe2(int pipefd[2], int flags)

flags 如果传入O_NONBLOCK,读写管道时就不会阻塞了。

具体的你man 一下就知道

//创建server管道。

mkfifo(Server_FIFO_Name,0777)

//打开服务器端口,等待读取。此时如果客户端还未写入数据服务器端会被阻塞。

server_fifo_fd = open(Server_FIFO_Name , O_RDONLY)

if( -1 == server_fifo_fd ){

fprintf( stderr , "Server fifo failure\n" )

exit(EXIT_FAILURE)

}

//从管道中读取数据。

read_res = read ( server_fifo_fd , &my_data , sizeof(my_data))

if(read_res >0){

//将字符串翻转.

reverse ( my_data.str )

//将客户端的pid号加入回送管道文件名中.

sprintf ( client_fifo, Client_FIFO_Name , my_data.client_pid)

//打开回送管道。

client_fifo_fd = open ( client_fifo , O_WRONLY )

if( -1 != client_fifo_fd ){

//向管道中写入返回的数据.

write ( client_fifo_fd , &my_data, sizeof(my_data))

close ( client_fifo_fd )

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10001171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存