當前位置:首頁 » 編程語言 » c語言pipe

c語言pipe

發布時間: 2022-02-27 11:28:35

A. pipe c語言幾個進程同時向一個pipe寫通道寫數據,會後面的覆蓋前面的嗎

PapeC語言幾個鏡頭進程,同時向一個pip寫通道寫戲劇

B. C語言中的fork和pipe

如果 A是定義在fork之前,fork了子進程自然會有A
因為fork之後 子進程復制了父進程的地址空間,父子進程不共享資源
為何要用pipe?

C. C語言編寫linux Shell, pipe的問題

在shell里,先用pipe()建個管道。

然後fork一個子進程,在子進程里用p2把管道的輸出端復制到標准輸出,然後調用exec()裝載第一個程序執行,比如ls。

在父進程里,繼續fork一個子進程,在子進程里用p2把管道的輸入端復制到標准輸入,然後調用exec()裝載第二個程序執行,比如grep。

這樣兩個子進程的管道就連通了。

D. linux下c語言exec與pipe問題

可以用popen函數:
FILE *fp = popen("ls", "r");
fgets(xxxxx);
pclose(fp);

具體用法網上很多的

E. 求助!c語言limits.h裡面定義的PIPE_BUF值是多少

在2.6.29內核中,\include\linux\limits.h定義:
#define PIPE_BUF 4096

其他平台,比如ARM等,定義如下:
#define PIPE_BUF PAGE_SIZE

這里PAGE_SIZE是在page.h或page_64.h:(與平台和系統相關)
#define PAGE_SHIFT12
#define PAGE_SIZE(1UL << PAGE_SHIFT)
1左移12位,也是4096。

所以,需要你自己弄清楚是什麼平台,是32位系統還是64位系統,一般是4096。

希望對你有幫助!

F. Linux下C語言問題 pipe問題(急)

你沒給分啊

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#define BUFSIZE 10

int main(int argc, char *argv[]) {
int i = 1;
int bytesin;
pid_t childpid;
int pfd[2];
if (argc < 2) {
fprintf(stderr, "Usage: %s command arg1 arg2 ...\n", argv[0]);
return 1;
}
if (pipe(pfd) == -1) {
perror("Failed to create the pipe");
return 1;
}
bytesin = strlen(argv[1]);
childpid = fork();
if (childpid == -1) {
perror("Failed to fork");
return 1;
}
while (argv[i] != NULL) {
if (childpid) {
if (write(pfd[1], argv[i], strlen(argv[i])) != -1)
printf("parent write over.\n");
}else {
bytesin = read(pfd[0], argv[i], BUFSIZE);
fprintf(stderr, "[%ld]: %.*s\n", (long) getpid(), bytesin, argv[i]);
}
++i; ############關鍵是這里
}
return 0;
}

G. C語言創建管道

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

int main(int argc,char *argv[])
{
int pd[2];/*用於保存管道文件描述符*/

char out[80],str[]="safasfsa";/*str是要寫入的字元串,out用於保存從管道讀取的字元串*/

assert(pipe(pd)!=-1);/*斷言用於確定pipe()函數執行成功,如果管道創建失敗,則pipe()返回-1*/

if (!fork()) write(pd[1],str,strlen(str));/*創建子進程,並將字元串寫入管道*/
else {
read(pd[0],out,strlen(str));/*在主進程中從管道中讀取子進程寫入的字元串*/
printf("%s\n",out);/*主進程中輸出。*/
}
return 0;
}

H. 在C語言中實現 UNIX中的輸入\輸出重導向,管道(pipe「|」),和後台工作(「&」)命令

要想自行實現
那麼就需要從命令行讀取識別>和<
在解析出>/<之後, 讀取下一個參數,作為重定向文件名
然後,在程序中, 通過freopen 打開重定向文件。
至於管道 就麻煩的多,因為要把輸出 作為其他程序輸入
這樣 需要把輸出保存在緩沖中,調用參數程序,然後把緩沖數據作為參數程序的輸入。

I. linux下c語言pipe無名管道 main函數創建兩個進程p1和p2,p1把一個文件名通過管道給main進程,main進程打開

#include <stdio.h>
main()
{
int i,r,p1,p2,fd[2];
char buf[50],s[50];
pipe(fd); //創建匿名管道,fd[0]為讀端,fd[1]為寫端
while((p1=fork())==-1); //創建子進程P1,直至成功為止(p1!=-1)
if(p1==0) //子進程P1執行邏輯
{
lockf(fd[1],1,0); //鎖定管道寫端,保證寫入數據的完整性
sprintf(buf,"child process P1 is sending messages!\n"); //在buf中填入准備寫入管道的信息數據
printf("child processP1!\n"); //列印「子進程P1正在運行」
write(fd[1],buf,50); //向管道寫端fd[1]寫入buf中的數據,寫完後該數據即可以從讀端fd[0]讀出
sleep(5); //睡眠5秒
lockf(fd[1],0,0); //解鎖管道寫端
exit(0); //子進程P1退出
}
else //主進程的執行邏輯
{
while((p2=fork())==-1); //創建第二個子進程P2
if(p2==0) //子進程P2的執行邏輯
{
lockf(fd[1],1,0); //鎖定管道寫端,保證數據寫入完整
sprintf(buf,"child process P2 is sending messages!\n"); //在buf中填入准備寫入管道的信息數據
printf("child processP2!\n"); //列印「子進程P2正在運行」
write(fd[1],buf,50); //向管道寫端fd[1]寫入buf中的數據,寫完後該數據即可從讀端fd[0]讀出
sleep(5); //睡眠5秒
lockf(fd[1],0,0); //解鎖管道寫端
exit(0); //子進程P2退出
}
//以下為主進程執行邏輯
wait(0); //等待某個子進程退出
if(r=read(fd[0],s,50)==-1) //從管道讀端fd[0]讀取P1或者P2寫入的數據(視哪個子進程搶先執行到lockf函數)
{
printf(:can't read pipe\n"); //讀取失敗,列印錯誤信息
}
else
{
printf(:%s\n",s); //列印出讀到的信息數據
}
wait(0); //等待第二個子進程退出
if(r=read(fd[0],s,50)==-1) //從管道讀端fd[0]讀取出P1或者P2寫入的數據(視哪個子進程後執行到lockf函數)
{
printf(:can't read pipe\n"); //讀取失敗,列印錯誤信息
}
else
{
printf(:%s\n",s); //列印讀取到的信息數據
}
exit(0); //主進程退出
}
}

總的說來,就是主進程創建了兩個子進程P1、P2,這兩個子進程分別向管道寫入了一行文字,然後主進程從管道另一端將這兩行文字讀出並列印出來
由於進程的並發執行性,哪個子進程的信息先寫到管道是隨機的,因此該程序每次運行的輸出可能並不相同,兩行文字之間可能會相互交換

熱點內容
求1到20的階乘的和c語言 發布:2025-01-11 02:34:10 瀏覽:570
安卓用什麼簡譜軟體 發布:2025-01-11 02:34:10 瀏覽:741
製作奇跡腳本 發布:2025-01-11 02:33:27 瀏覽:815
網易雲音樂腳本 發布:2025-01-11 02:22:56 瀏覽:608
java軟體開發培訓怎麼樣 發布:2025-01-11 02:17:53 瀏覽:194
md5加密優點 發布:2025-01-11 02:12:52 瀏覽:435
讀取文件夾所有文件名 發布:2025-01-11 02:12:50 瀏覽:682
雲伺服器華為 發布:2025-01-11 02:11:07 瀏覽:162
路由器重置了wifi默認密碼是什麼 發布:2025-01-11 02:03:55 瀏覽:660
2019速騰買什麼配置好 發布:2025-01-11 01:35:07 瀏覽:831