में लिखें मैं एक विशिष्ट मानक इनपुट के साथ एक प्रोग्राम चलाने की कोशिश कर रहा हूं। मैं एक फ़ाइल की एक फ़ाइल वर्णनकर्ता का उपयोग कर जहां मैं क्या stdin में रखना चाहते हैं सफल होने, लेकिन मैं stdin पर सीधे लिखने के लिए असफल:execv * और stdin
$cat input.test
echo Hello
$
कोड सी:
int main(int argc, char **argv)
{
int fd = 0;
fd = open("input.test", O_CREAT);
close(STDIN_FILENO);
dup2(fd, STDIN_FILENO);
char *const args[] = { "bash", NULL };
execvp("bash", args);
}
कि काम करता है:
$./a.out
Hello
$
लेकिन अगर मैं और पाइप कुछ भी नहीं कार्यक्रम प्रदर्शित करता है का उपयोग कर STDIN पर सीधे लिखने की कोशिश रहती है चल रहा है:
int main(int argc, char **argv)
{
int fds[2];
pipe(fds);
close(STDIN_FILENO);
dup2(fds[1], STDIN_FILENO);
write(fds[1], "echo Hello;", 11); // Résults are identics with fds[0]
char *const args[] = { "bash", NULL };
execvp("bash", args);
}
आपकी मदद
Cordially, Bastien के लिए धन्यवाद।
संपादित समस्या हल: अपने जवाब के लिए
धन्यवाद, यहाँ कोड काम करता है जो:
int main(void)
{
int fd[2];
pid_t pid;
if (pipe(fd) < 0)
return EXIT_FAILURE;
if ((pid = fork()) < 0)
return EXIT_FAILURE;
else if (pid != 0) { /* father */
close(fd[1]);
dup2(fd[0], STDIN_FILENO);
execlp("bash", "bash", (char *)0);
} else { /* son */
close(fd[0]);
write(fd[1], "echo hello\n", 11);
}
return EXIT_SUCCESS;
}
आप दूसरों को क्यों कम कर रहे हैं?पूछताछ दिमाग जानना चाहते हैं :) – Will
मुझे नहीं पता कि सभी उत्तरों को क्यों हटा दिया गया था। – Mat