我有這兩個檔案,我使用 exec() 從 main.c 呼叫 exec.c。據我了解 exec.c 應該繼承管道,但它說 exec.c 中沒有鏈接管道。這里有什么問題?
主檔案
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define die(e) \
do \
{ \
fprintf(stderr, "%s\n", e); \
exit(EXIT_FAILURE); \
} while (0);
int main(int argc, char *argv[])
{
int link[2];
pid_t pid;
char foo[4096];
if (pipe(link) == -1)
die("pipe");
if ((pid = fork()) == -1)
die("fork");
if (pid == 0)
{
dup2(link[1], STDOUT_FILENO);
close(link[0]);
close(link[1]);
execvp("./exec", argv);
die("execl");
}
else
{
close(link[1]);
int nbytes = read(link[0], foo, sizeof(foo));
printf("Output: (%.*s)\n", nbytes, foo);
wait(NULL);
}
return 0;
}
執行程式
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>
int main(int argc, char *argv[])
{
char a;
a='A';
write(link[1],&a,sizeof(a));
return 0;
}
我只是在練習,想輸出從 pipe() 保存的資料
我做錯了什么,你能幫我除錯嗎?蒂亞!
uj5u.com熱心網友回復:
在main.c程式中,您通過子行程的標準輸出連接管道。
這意味著子行程通過其正常的標準輸出將資訊傳遞給父行程。
因此,該exec.c程式可以像這樣簡單:
#include <stdio.h>
int main(void)
{
printf("A");
}
更具體地說,您的exec.c源檔案對管道一無所知,絕對不是關于變數link,并且只會無法構建。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344197.html
上一篇:如何使用vi命令給行編號?
