本文整理汇总了C++中posix_spawn_file_actions_destroy函数的典型用法代码示例。如果您正苦于以下问题:C++ posix_spawn_file_actions_destroy函数的具体用法?C++ posix_spawn_file_actions_destroy怎么用?C++ posix_spawn_file_actions_destroy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了posix_spawn_file_actions_destroy函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: spawn_staprun
static pid_t
spawn_staprun(char** args)
{
pid_t pid = -1;
posix_spawn_file_actions_t fa;
int err;
if ((err = posix_spawn_file_actions_init(&fa)) != 0)
{
reply ("ERROR: Can't initialize posix_spawn actions: %s\n", strerror(err));
return -1;
}
// no stdin for staprun
if ((err = posix_spawn_file_actions_addopen(&fa, 0, "/dev/null", O_RDONLY, 0)) != 0)
{
reply("ERROR: Can't set posix_spawn actions: %s\n", strerror(err));
posix_spawn_file_actions_destroy(&fa);
return -1;
}
if ((err = posix_spawn(&pid, args[0], &fa, NULL, args, environ)) != 0)
{
reply("ERROR: Can't launch stap backend: %s\n", strerror(err));
posix_spawn_file_actions_destroy(&fa);
return -1;
}
posix_spawn_file_actions_destroy(&fa);
return pid;
}
开发者ID:rth7680,项目名称:systemtap,代码行数:31,代码来源:stapsh.c
示例2: parent_main
static int
parent_main (void)
{
FILE *fp;
char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL };
posix_spawn_file_actions_t actions;
bool actions_allocated;
int err;
pid_t child;
int status;
int exitstatus;
/* Create a data file with specific contents. */
fp = fopen (DATA_FILENAME, "wb");
if (fp == NULL)
{
perror ("cannot create data file");
return 1;
}
fwrite ("Halle Potta", 1, 11, fp);
if (fflush (fp) || fclose (fp))
{
perror ("cannot prepare data file");
return 1;
}
/* Avoid reading from our stdin, as it could block. */
freopen ("/dev/null", "rb", stdin);
/* Test whether posix_spawn_file_actions_addopen with this file name
actually works, but spawning a child that reads from this file. */
actions_allocated = false;
if ((err = posix_spawn_file_actions_init (&actions)) != 0
|| (actions_allocated = true,
(err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0
|| (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0))
{
if (actions_allocated)
posix_spawn_file_actions_destroy (&actions);
errno = err;
perror ("subprocess failed");
return 1;
}
posix_spawn_file_actions_destroy (&actions);
status = 0;
while (waitpid (child, &status, 0) != child)
;
if (!WIFEXITED (status))
{
fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status);
return 1;
}
exitstatus = WEXITSTATUS (status);
if (exitstatus != 0)
{
fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus);
return 1;
}
return 0;
}
开发者ID:ajnelson,项目名称:gnulib,代码行数:60,代码来源:test-posix_spawn3.c
示例3: child_spawn1_internal
pid_t child_spawn1_internal (char const *prog, char const *const *argv, char const *const *envp, int *p, int to)
{
posix_spawn_file_actions_t actions ;
posix_spawnattr_t attr ;
int e ;
pid_t pid ;
int haspath = !!env_get("PATH") ;
if (coe(p[!(to & 1)]) < 0) { e = errno ; goto err ; }
e = posix_spawnattr_init(&attr) ;
if (e) goto err ;
{
sigset_t set ;
sigemptyset(&set) ;
e = posix_spawnattr_setsigmask(&attr, &set) ;
if (e) goto errattr ;
e = posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGMASK) ;
if (e) goto errattr ;
}
e = posix_spawn_file_actions_init(&actions) ;
if (e) goto errattr ;
e = posix_spawn_file_actions_adddup2(&actions, p[to & 1], to & 1) ;
if (e) goto erractions ;
e = posix_spawn_file_actions_addclose(&actions, p[to & 1]) ;
if (e) goto erractions ;
if (to & 2)
{
e = posix_spawn_file_actions_adddup2(&actions, to & 1, !(to & 1)) ;
if (e) goto erractions ;
}
if (!haspath && (setenv("PATH", SKALIBS_DEFAULTPATH, 0) < 0)) { e = errno ; goto erractions ; }
e = posix_spawnp(&pid, prog, &actions, &attr, (char *const *)argv, (char *const *)envp) ;
if (!haspath) unsetenv("PATH") ;
posix_spawn_file_actions_destroy(&actions) ;
posix_spawnattr_destroy(&attr) ;
fd_close(p[to & 1]) ;
if (e) goto errp ;
return pid ;
erractions:
posix_spawn_file_actions_destroy(&actions) ;
errattr:
posix_spawnattr_destroy(&attr) ;
err:
fd_close(p[to & 1]) ;
errp:
fd_close(p[!(to & 1)]) ;
errno = e ;
return 0 ;
}
开发者ID:fvigotti,项目名称:skalibs,代码行数:49,代码来源:child_spawn1_internal.c
示例4: CPLSpawnAsyncFinish
/**
* Wait for the forked process to finish.
*
* @param p handle returned by CPLSpawnAsync()
* @param bWait set to TRUE to wait for the child to terminate. Otherwise the associated
* handles are just cleaned.
* @param bKill set to TRUE to force child termination (unimplemented right now).
*
* @return the return code of the forked process if bWait == TRUE, 0 otherwise
*
* @since GDAL 1.10.0
*/
int CPLSpawnAsyncFinish(CPLSpawnedProcess* p, int bWait, CPL_UNUSED int bKill)
{
int status = 0;
if( bWait )
{
while(1)
{
status = -1;
const int ret = waitpid (p->pid, &status, 0);
if (ret < 0)
{
if (errno != EINTR)
{
break;
}
}
else
break;
}
}
CPLSpawnAsyncCloseInputFileHandle(p);
CPLSpawnAsyncCloseOutputFileHandle(p);
CPLSpawnAsyncCloseErrorFileHandle(p);
#ifdef HAVE_POSIX_SPAWNP
if( p->bFreeActions )
posix_spawn_file_actions_destroy(&p->actions);
#endif
CPLFree(p);
return status;
}
开发者ID:bbradbury,项目名称:lib_gdal,代码行数:44,代码来源:cpl_spawn.cpp
示例5: spawn_win32
static void spawn_win32(void) {
char module_name[WATCHMAN_NAME_MAX];
GetModuleFileName(NULL, module_name, sizeof(module_name));
char *argv[MAX_DAEMON_ARGS] = {
module_name,
"--foreground",
NULL
};
posix_spawn_file_actions_t actions;
posix_spawnattr_t attr;
pid_t pid;
int i;
for (i = 0; daemon_argv[i]; i++) {
append_argv(argv, daemon_argv[i]);
}
posix_spawnattr_init(&attr);
posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETPGROUP);
posix_spawn_file_actions_init(&actions);
posix_spawn_file_actions_addopen(&actions,
STDIN_FILENO, "/dev/null", O_RDONLY, 0);
posix_spawn_file_actions_addopen(&actions,
STDOUT_FILENO, log_name, O_WRONLY|O_CREAT|O_APPEND, 0600);
posix_spawn_file_actions_adddup2(&actions,
STDOUT_FILENO, STDERR_FILENO);
posix_spawnp(&pid, argv[0], &actions, &attr, argv, environ);
posix_spawnattr_destroy(&attr);
posix_spawn_file_actions_destroy(&actions);
}
开发者ID:Jerry-goodboy,项目名称:watchman,代码行数:30,代码来源:main.c
示例6: TEST
TEST(spawn, posix_spawn_file_actions) {
int fds[2];
ASSERT_NE(-1, pipe(fds));
posix_spawn_file_actions_t fa;
ASSERT_EQ(0, posix_spawn_file_actions_init(&fa));
ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[0]));
ASSERT_EQ(0, posix_spawn_file_actions_adddup2(&fa, fds[1], 1));
ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[1]));
// Check that close(2) failures are ignored by closing the same fd again.
ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[1]));
ASSERT_EQ(0, posix_spawn_file_actions_addopen(&fa, 56, "/proc/version", O_RDONLY, 0));
ExecTestHelper eth;
eth.SetArgs({"ls", "-l", "/proc/self/fd", nullptr});
pid_t pid;
ASSERT_EQ(0, posix_spawnp(&pid, eth.GetArg0(), &fa, nullptr, eth.GetArgs(), eth.GetEnv()));
ASSERT_EQ(0, posix_spawn_file_actions_destroy(&fa));
ASSERT_EQ(0, close(fds[1]));
std::string content;
ASSERT_TRUE(android::base::ReadFdToString(fds[0], &content));
ASSERT_EQ(0, close(fds[0]));
AssertChildExited(pid, 0);
// We'll know the dup2 worked if we see any ls(1) output in our pipe.
// The open we can check manually...
bool open_to_fd_56_worked = false;
for (const auto& line : android::base::Split(content, "\n")) {
if (line.find(" 56 -> /proc/version") != std::string::npos) open_to_fd_56_worked = true;
}
ASSERT_TRUE(open_to_fd_56_worked);
}
开发者ID:android,项目名称:platform_bionic,代码行数:35,代码来源:spawn_test.cpp
示例7: spawn_via_gimli
static void spawn_via_gimli(void)
{
char *argv[MAX_DAEMON_ARGS] = {
GIMLI_MONITOR_PATH,
#ifdef WATCHMAN_STATE_DIR
"--trace-dir=" WATCHMAN_STATE_DIR "/traces",
#endif
"--pidfile", pid_file,
"watchman",
"--foreground",
NULL
};
posix_spawn_file_actions_t actions;
posix_spawnattr_t attr;
pid_t pid;
int i;
for (i = 0; daemon_argv[i]; i++) {
append_argv(argv, daemon_argv[i]);
}
close_random_fds();
posix_spawnattr_init(&attr);
posix_spawn_file_actions_init(&actions);
posix_spawn_file_actions_addopen(&actions,
STDOUT_FILENO, log_name, O_WRONLY|O_CREAT|O_APPEND, 0600);
posix_spawn_file_actions_adddup2(&actions,
STDOUT_FILENO, STDERR_FILENO);
posix_spawnp(&pid, argv[0], &actions, &attr, argv, environ);
posix_spawnattr_destroy(&attr);
posix_spawn_file_actions_destroy(&actions);
}
开发者ID:Jerry-goodboy,项目名称:watchman,代码行数:33,代码来源:main.c
示例8: pipeline
void pipeline(const char *const *argv, struct pipeline *pl)
{
posix_spawn_file_actions_t file_acts;
int pipefds[2];
if (pipe(pipefds)) {
die_errno(errno, "pipe");
}
die_errno(posix_spawn_file_actions_init(&file_acts),
"posix_spawn_file_actions_init");
die_errno(posix_spawn_file_actions_adddup2(&file_acts, pipefds[0], 0),
"posix_spawn_file_actions_adddup2");
die_errno(posix_spawn_file_actions_addclose(&file_acts, pipefds[0]),
"posix_spawn_file_actions_addclose");
die_errno(posix_spawn_file_actions_addclose(&file_acts, pipefds[1]),
"posix_spawn_file_actions_addclose");
die_errno(posix_spawnp(&pl->pid, argv[0], &file_acts, NULL,
(char * const *)argv, environ),
"posix_spawnp: %s", argv[0]);
die_errno(posix_spawn_file_actions_destroy(&file_acts),
"posix_spawn_file_actions_destroy");
if (close(pipefds[0])) {
die_errno(errno, "close");
}
pl->infd = pipefds[1];
}
开发者ID:2600hz-archive,项目名称:rabbitmq-c,代码行数:31,代码来源:process.c
示例9: l_posix_spawn_file_actions_destroy
static int l_posix_spawn_file_actions_destroy(lua_State *L) {
int r;
posix_spawn_file_actions_t *file_actions = luaL_checkudata(L, 1, "posix_spawn_file_actions_t");
if (0 != (r = posix_spawn_file_actions_destroy(file_actions))) {
lua_pushnil(L);
lua_pushstring(L, strerror(r));
lua_pushinteger(L, r);
return 3;
}
lua_pushboolean(L, 1);
return 1;
}
开发者ID:daurnimator,项目名称:lua-spawn,代码行数:12,代码来源:posix.c
示例10: do_bind_shell
void do_bind_shell(char* env, int port) {
char* bundle_root = bundle_path();
char* shell_path = NULL;
asprintf(&shell_path, "%s/iosbinpack64/bin/bash", bundle_root);
char* argv[] = {shell_path, NULL};
char* envp[] = {env, NULL};
struct sockaddr_in sa;
sa.sin_len = 0;
sa.sin_family = AF_INET;
sa.sin_port = htons(port);
sa.sin_addr.s_addr = INADDR_ANY;
int sock = socket(PF_INET, SOCK_STREAM, 0);
bind(sock, (struct sockaddr*)&sa, sizeof(sa));
listen(sock, 1);
printf("shell listening on port %d\n", port);
for(;;) {
int conn = accept(sock, 0, 0);
posix_spawn_file_actions_t actions;
posix_spawn_file_actions_init(&actions);
posix_spawn_file_actions_adddup2(&actions, conn, 0);
posix_spawn_file_actions_adddup2(&actions, conn, 1);
posix_spawn_file_actions_adddup2(&actions, conn, 2);
pid_t spawned_pid = 0;
int spawn_err = posix_spawn(&spawned_pid, shell_path, &actions, NULL, argv, envp);
if (spawn_err != 0){
perror("shell spawn error");
} else {
printf("shell posix_spawn success!\n");
}
posix_spawn_file_actions_destroy(&actions);
printf("our pid: %d\n", getpid());
printf("spawned_pid: %d\n", spawned_pid);
int wl = 0;
while (waitpid(spawned_pid, &wl, 0) == -1 && errno == EINTR);
}
free(shell_path);
}
开发者ID:big538,项目名称:iOS-10.1.1-Project-0-Exploit-For-Jailbreak---F.C.E.-365-Fork-,代码行数:52,代码来源:drop_payload.c
示例11: do_test
static int
do_test (void)
{
/* Try to eliminate the file descriptor limit. */
{
struct rlimit limit;
if (getrlimit (RLIMIT_NOFILE, &limit) < 0)
{
printf ("error: getrlimit: %m\n");
return 1;
}
limit.rlim_cur = RLIM_INFINITY;
if (setrlimit (RLIMIT_NOFILE, &limit) < 0)
printf ("warning: setrlimit: %m\n");
}
maxfd = sysconf (_SC_OPEN_MAX);
printf ("info: _SC_OPEN_MAX: %ld\n", maxfd);
invalid_fd = dup (0);
if (invalid_fd < 0)
{
printf ("error: dup: %m\n");
return 1;
}
if (close (invalid_fd) < 0)
{
printf ("error: close: %m\n");
return 1;
}
int ret = posix_spawn_file_actions_init (&actions);
if (ret != 0)
{
errno = ret;
printf ("error: posix_spawn_file_actions_init: %m\n");
return 1;
}
all_functions ();
ret = posix_spawn_file_actions_destroy (&actions);
if (ret != 0)
{
errno = ret;
printf ("error: posix_spawn_file_actions_destroy: %m\n");
return 1;
}
return errors;
}
开发者ID:apinski-cavium,项目名称:glibc,代码行数:51,代码来源:tst-posix_spawn-fd.c
示例12: spawn_site_specific
// Spawn watchman via a site-specific spawn helper program.
// We'll pass along any daemon-appropriate arguments that
// we noticed during argument parsing.
static void spawn_site_specific(const char *spawner)
{
char *argv[MAX_DAEMON_ARGS] = {
(char*)spawner,
NULL
};
posix_spawn_file_actions_t actions;
posix_spawnattr_t attr;
pid_t pid;
int i;
int res, err;
for (i = 0; daemon_argv[i]; i++) {
append_argv(argv, daemon_argv[i]);
}
close_random_fds();
posix_spawnattr_init(&attr);
posix_spawn_file_actions_init(&actions);
posix_spawn_file_actions_addopen(&actions,
STDOUT_FILENO, log_name, O_WRONLY|O_CREAT|O_APPEND, 0600);
posix_spawn_file_actions_adddup2(&actions,
STDOUT_FILENO, STDERR_FILENO);
res = posix_spawnp(&pid, argv[0], &actions, &attr, argv, environ);
err = errno;
posix_spawnattr_destroy(&attr);
posix_spawn_file_actions_destroy(&actions);
if (res) {
w_log(W_LOG_FATAL, "Failed to spawn watchman via `%s': %s\n", spawner,
strerror(err));
}
if (waitpid(pid, &res, 0) == -1) {
w_log(W_LOG_FATAL, "Failed waiting for %s: %s\n", spawner, strerror(errno));
}
if (WIFEXITED(res) && WEXITSTATUS(res) == 0) {
return;
}
if (WIFEXITED(res)) {
w_log(W_LOG_FATAL, "%s: exited with status %d\n", spawner,
WEXITSTATUS(res));
} else if (WIFSIGNALED(res)) {
w_log(W_LOG_FATAL, "%s: signaled with %d\n", spawner, WTERMSIG(res));
}
w_log(W_LOG_ERR, "%s: failed to start, exit status %d\n", spawner, res);
}
开发者ID:Jerry-goodboy,项目名称:watchman,代码行数:54,代码来源:main.c
示例13: tc_libc_spawn_posix_spawn_file_actions_init
/**
* @fn : tc_libc_spawn_posix_spawn_file_actions_init
* @brief : Initializes the object referenced by file_action
* @scenario : initializes the object referenced by st_fileactions, to an empty set of file actions for subsequent use
* @API's covered : posix_spawn_file_actions_init, posix_spawn_file_actions_destroy
* @Preconditions : none
* @Postconditions : posix_spawn_file_actions_destroy
* @Return : void
*/
static void tc_libc_spawn_posix_spawn_file_actions_init(void)
{
posix_spawn_file_actions_t st_fileactions;
int ret_chk = ERROR;
ret_chk = posix_spawn_file_actions_init(&st_fileactions);
TC_ASSERT_EQ("posix_spawn_file_actions_init", ret_chk, OK);
TC_ASSERT_EQ("posix_spawn_file_actions_init", st_fileactions, NULL);
ret_chk = posix_spawn_file_actions_destroy(&st_fileactions);
TC_ASSERT_EQ("posix_spawn_file_actions_destroy", ret_chk, OK);
TC_SUCCESS_RESULT();
}
开发者ID:carhero,项目名称:TizenRT,代码行数:23,代码来源:tc_libc_spawn.c
示例14: spawn_staprun_piped
// based on stap_spawn_piped from util.cxx
static pid_t
spawn_staprun_piped(char** args)
{
pid_t pid = -1;
int outfd[2], errfd[2];
posix_spawn_file_actions_t fa;
int err;
if ((err = posix_spawn_file_actions_init(&fa)) != 0)
{
reply("ERROR: Can't initialize posix_spawn actions: %s\n", strerror(err));
return -1;
}
if ((err = pipe_child_fd(&fa, outfd, 1)) != 0)
{
reply("ERROR: Can't create pipe for stdout: %s\n",
err > 0 ? strerror(err) : "pipe_child_fd");
goto cleanup_fa;
}
if ((err = pipe_child_fd(&fa, errfd, 2)) != 0)
{
reply("ERROR: Can't create pipe for stderr: %s\n",
err > 0 ? strerror(err) : "pipe_child_fd");
goto cleanup_out;
}
posix_spawn(&pid, args[0], &fa, NULL, args, environ);
if (pid > 0)
fd_staprun_err = errfd[0];
else
close(errfd[0]);
close(errfd[1]);
cleanup_out:
if (pid > 0)
fd_staprun_out = outfd[0];
else
close(outfd[0]);
close(outfd[1]);
cleanup_fa:
posix_spawn_file_actions_destroy(&fa);
return pid;
}
开发者ID:rth7680,项目名称:systemtap,代码行数:48,代码来源:stapsh.c
示例15: tc_libc_spawn_posix_spawn_file_actions_destroy
/**
* @fn : tc_libc_spawn_posix_spawn_file_actions_destroy
* @brief : destroy the object referenced by st_fileactions
* @scenario : destroys the object referenced by st_fileactions which was previously intialized
* @API's covered : posix_spawn_file_actions_init, posix_spawn_file_actions_addopen ,posix_spawn_file_actions_destroy
* @Preconditions : posix_spawn_file_actions_init ,posix_spawn_file_actions_addopen
* @Postconditions : none
* @Return : void
*/
static void tc_libc_spawn_posix_spawn_file_actions_destroy(void)
{
const char szfilepath[] = "./testdata.txt";
posix_spawn_file_actions_t st_fileactions;
int ret_chk = ERROR;
ret_chk = posix_spawn_file_actions_init(&st_fileactions);
TC_ASSERT_EQ("posix_spawn_file_actions_init", ret_chk, OK);
ret_chk = posix_spawn_file_actions_addopen(&st_fileactions, 1, szfilepath, O_WRONLY, 0644);
TC_ASSERT_EQ("posix_spawn_file_actions_addopen", ret_chk, OK);
TC_ASSERT_NOT_NULL("posix_spawn_file_actions_addopen", st_fileactions);
ret_chk = posix_spawn_file_actions_destroy(&st_fileactions);
TC_ASSERT_EQ("posix_spawn_file_actions_destroy", ret_chk, OK);
TC_ASSERT_EQ("posix_spawn_file_actions_destroy", st_fileactions, NULL);
TC_SUCCESS_RESULT();
}
开发者ID:carhero,项目名称:TizenRT,代码行数:28,代码来源:tc_libc_spawn.c
示例16: main
int main()
{
int ret_err = 0;
pid_t pid_child;
char buf_err[64];
posix_spawn_file_actions_t posix_faction;
char *argv_child[] = { "forkexec_child", NULL };
printf("Parent[%d]: Start\n", getpid());
if ((ret_err = posix_spawn_file_actions_init(&posix_faction)) != 0)
{
strerror_r(ret_err, buf_err, sizeof(buf_err));
fprintf(stderr, "Fail: file_actions_addopen: %s\n", buf_err);
exit(EXIT_FAILURE);
}
if ((ret_err = posix_spawn_file_actions_addopen(&posix_faction,
3, "pspawn.log", O_WRONLY | O_CREAT | O_APPEND, 0664)) != 0)
{
strerror_r(ret_err, buf_err, sizeof(buf_err));
fprintf(stderr, "Fail: file_actions_addopen: %s\n", buf_err);
exit(EXIT_FAILURE);
}
ret_err = posix_spawn( &pid_child,
argv_child[0],
&posix_faction,
NULL,
argv_child,
NULL);
if ((ret_err = posix_spawn_file_actions_destroy(&posix_faction)) != 0)
{
strerror_r(ret_err, buf_err, sizeof(buf_err));
fprintf(stderr, "Fail: file_actions_destroy: %s\n", buf_err);
exit(EXIT_FAILURE);
}
printf("Parent[%d]: Wait for child(%d) \n", getpid(), (int)pid_child);
(void)wait(NULL);
printf("Parent[%d]: Exit\n", getpid());
return 0;
}
开发者ID:pr0gr4m,项目名称:Study,代码行数:41,代码来源:pspawn1.c
示例17: tc_libc_spawn_add_file_action
/**
* @fn : tc_libc_spawn_add_file_action
* @brief : Add the file action
* @scenario : Add the file action to the end for the file action list
* @API's covered : posix_spawn_file_actions_init, posix_spawn_file_actions_addopen, add_file_action
* @Preconditions : posix_spawn_file_actions_init,posix_spawn_file_actions_addopen
* @Postconditions : posix_spawn_file_actions_destroy
* @Return : void
*/
static void tc_libc_spawn_add_file_action(void)
{
const char szfilepath[] = "./testdata.txt";
posix_spawn_file_actions_t st_fileactions;
struct spawn_open_file_action_s *entry1;
struct spawn_open_file_action_s *entry2;
size_t length;
size_t alloc_num;
int ret_chk = ERROR;
ret_chk = posix_spawn_file_actions_init(&st_fileactions);
TC_ASSERT_EQ("posix_spawn_file_actions_init", ret_chk, OK);
ret_chk = posix_spawn_file_actions_addopen(&st_fileactions, 1, szfilepath, O_WRONLY, 0644);
TC_ASSERT_EQ("posix_spawn_file_actions_addopen", ret_chk, OK);
length = strlen(szfilepath);
alloc_num = SIZEOF_OPEN_FILE_ACTION_S(length);
/* Allocate the action list entry of this size */
entry1 = (struct spawn_open_file_action_s *)zalloc(alloc_num);
TC_ASSERT_NOT_NULL("zalloc", entry1);
/* And add it to the file action list */
add_file_action(st_fileactions, (struct spawn_general_file_action_s *)entry1);
entry2 = (struct spawn_open_file_action_s *)zalloc(alloc_num);
TC_ASSERT_NOT_NULL("zalloc", entry2);
/* And add it to the file action list */
add_file_action(st_fileactions, (struct spawn_general_file_action_s *)entry2);
TC_ASSERT_EQ("add_file_action", entry1->flink, (struct spawn_general_file_action_s *)entry2);
ret_chk = posix_spawn_file_actions_destroy(&st_fileactions);
TC_ASSERT_EQ("posix_spawn_file_actions_destroy", ret_chk, OK);
TC_SUCCESS_RESULT();
}
开发者ID:carhero,项目名称:TizenRT,代码行数:50,代码来源:tc_libc_spawn.c
示例18: CatFileToString
static void CatFileToString(posix_spawnattr_t* sa, const char* path, std::string* content) {
int fds[2];
ASSERT_NE(-1, pipe(fds));
posix_spawn_file_actions_t fa;
ASSERT_EQ(0, posix_spawn_file_actions_init(&fa));
ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[0]));
ASSERT_EQ(0, posix_spawn_file_actions_adddup2(&fa, fds[1], 1));
ASSERT_EQ(0, posix_spawn_file_actions_addclose(&fa, fds[1]));
ExecTestHelper eth;
eth.SetArgs({"cat", path, nullptr});
pid_t pid;
ASSERT_EQ(0, posix_spawnp(&pid, eth.GetArg0(), &fa, sa, eth.GetArgs(), nullptr));
ASSERT_EQ(0, posix_spawn_file_actions_destroy(&fa));
ASSERT_EQ(0, close(fds[1]));
ASSERT_TRUE(android::base::ReadFdToString(fds[0], content));
ASSERT_EQ(0, close(fds[0]));
AssertChildExited(pid, 0);
}
开发者ID:android,项目名称:platform_bionic,代码行数:21,代码来源:spawn_test.cpp
示例19: CloseHandle
//GetExitCodeProcess
void Process::cleanup() {
#ifdef WIN32
if (!piProcInfo.hProcess) return;
CloseHandle(piProcInfo.hProcess);
CloseHandle(piProcInfo.hThread);
if (p_stdin)
close(p_stdin);
if (p_stdout)
close(p_stdout);
if (p_stderr)
close(p_stderr);
CloseHandle(handle_IN_Rd);
CloseHandle(handle_IN_Wr);
CloseHandle(handle_OUT_Rd);
CloseHandle(handle_OUT_Wr);
CloseHandle(handle_ERR_Rd);
CloseHandle(handle_ERR_Wr);
#else
if (!pid) return;
close(out[0]);
close(err[0]);
close(in[1]);
close(out[1]);
close(err[1]);
close(in[0]);
posix_spawn_file_actions_destroy(&action);
#endif
}
开发者ID:alessiodore,项目名称:trax,代码行数:39,代码来源:process.cpp
示例20: spawn_param_execute
int spawn_param_execute(struct spawn_params *p)
{
lua_State *L = p->L;
int ret;
struct process *proc;
if (!p->argv) {
p->argv = lua_newuserdata(L, 2 * sizeof *p->argv);
p->argv[0] = p->command;
p->argv[1] = 0;
}
if (!p->envp)
p->envp = (const char **)environ;
proc = lua_newuserdata(L, sizeof *proc);
luaL_getmetatable(L, PROCESS_HANDLE);
lua_setmetatable(L, -2);
proc->status = -1;
errno = 0;
ret = posix_spawnp(&proc->pid, p->command, &p->redirect, &p->attr,
(char *const *)p->argv, (char *const *)p->envp);
posix_spawn_file_actions_destroy(&p->redirect);
posix_spawnattr_destroy(&p->attr);
return ret != 0 || errno != 0 ? push_error(L) : 1;
}
开发者ID:o-lim,项目名称:lua-ex,代码行数:23,代码来源:spawn.c
注:本文中的posix_spawn_file_actions_destroy函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论