本文整理汇总了C++中prctl函数的典型用法代码示例。如果您正苦于以下问题:C++ prctl函数的具体用法?C++ prctl怎么用?C++ prctl使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了prctl函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: crash_catcher
static void crash_catcher(int signum, siginfo_t *siginfo, void *context)
{
//ucontext_t *ucontext = (ucontext_t*)context;
pid_t dbg_pid;
int fd[2];
/* Make sure the effective uid is the real uid */
if(getuid() != geteuid())
{
raise(signum);
return;
}
safe_write(STDERR_FILENO, fatal_err, sizeof(fatal_err)-1);
if(pipe(fd) == -1)
{
safe_write(STDERR_FILENO, pipe_err, sizeof(pipe_err)-1);
raise(signum);
return;
}
crash_info.signum = signum;
crash_info.pid = getpid();
crash_info.has_siginfo = !!siginfo;
if(siginfo)
crash_info.siginfo = *siginfo;
if(cc_user_info)
cc_user_info(crash_info.buf, crash_info.buf+sizeof(crash_info.buf));
/* Fork off to start a crash handler */
switch((dbg_pid=fork()))
{
/* Error */
case -1:
safe_write(STDERR_FILENO, fork_err, sizeof(fork_err)-1);
raise(signum);
return;
case 0:
dup2(fd[0], STDIN_FILENO);
close(fd[0]);
close(fd[1]);
execl(argv0, argv0, crash_switch, NULL);
safe_write(STDERR_FILENO, exec_err, sizeof(exec_err)-1);
_exit(1);
default:
#ifdef __linux__
prctl(PR_SET_PTRACER, dbg_pid, 0, 0, 0);
#endif
safe_write(fd[1], &crash_info, sizeof(crash_info));
close(fd[0]);
close(fd[1]);
/* Wait; we'll be killed when gdb is done */
do {
int status;
if(waitpid(dbg_pid, &status, 0) == dbg_pid &&
(WIFEXITED(status) || WIFSIGNALED(status)))
{
/* The debug process died before it could kill us */
raise(signum);
break;
}
} while(1);
}
}
开发者ID:0xmono,项目名称:openmw,代码行数:69,代码来源:crashcatcher.cpp
示例2: setup_machine_raw
static int setup_machine_raw(uint64_t size, sd_bus_error *error) {
_cleanup_free_ char *tmp = NULL;
_cleanup_close_ int fd = -1;
struct statvfs ss;
pid_t pid = 0;
siginfo_t si;
int r;
/* We want to be able to make use of btrfs-specific file
* system features, in particular subvolumes, reflinks and
* quota. Hence, if we detect that /var/lib/machines.raw is
* not located on btrfs, let's create a loopback file, place a
* btrfs file system into it, and mount it to
* /var/lib/machines. */
fd = open("/var/lib/machines.raw", O_RDWR|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
if (fd >= 0) {
r = fd;
fd = -1;
return r;
}
if (errno != ENOENT)
return sd_bus_error_set_errnof(error, errno, "Failed to open /var/lib/machines.raw: %m");
r = tempfn_xxxxxx("/var/lib/machines.raw", NULL, &tmp);
if (r < 0)
return r;
(void) mkdir_p_label("/var/lib", 0755);
fd = open(tmp, O_RDWR|O_CREAT|O_EXCL|O_NOCTTY|O_CLOEXEC, 0600);
if (fd < 0)
return sd_bus_error_set_errnof(error, errno, "Failed to create /var/lib/machines.raw: %m");
if (fstatvfs(fd, &ss) < 0) {
r = sd_bus_error_set_errnof(error, errno, "Failed to determine free space on /var/lib/machines.raw: %m");
goto fail;
}
if (ss.f_bsize * ss.f_bavail < VAR_LIB_MACHINES_FREE_MIN) {
r = sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "Not enough free disk space to set up /var/lib/machines.");
goto fail;
}
if (ftruncate(fd, size) < 0) {
r = sd_bus_error_set_errnof(error, errno, "Failed to enlarge /var/lib/machines.raw: %m");
goto fail;
}
pid = fork();
if (pid < 0) {
r = sd_bus_error_set_errnof(error, errno, "Failed to fork mkfs.btrfs: %m");
goto fail;
}
if (pid == 0) {
/* Child */
(void) reset_all_signal_handlers();
(void) reset_signal_mask();
assert_se(prctl(PR_SET_PDEATHSIG, SIGTERM) == 0);
fd = safe_close(fd);
execlp("mkfs.btrfs", "-Lvar-lib-machines", tmp, NULL);
if (errno == ENOENT)
_exit(99);
_exit(EXIT_FAILURE);
}
r = wait_for_terminate(pid, &si);
if (r < 0) {
sd_bus_error_set_errnof(error, r, "Failed to wait for mkfs.btrfs: %m");
goto fail;
}
pid = 0;
if (si.si_code != CLD_EXITED) {
r = sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "mkfs.btrfs died abnormally.");
goto fail;
}
if (si.si_status == 99) {
r = sd_bus_error_set_errnof(error, ENOENT, "Cannot set up /var/lib/machines, mkfs.btrfs is missing");
goto fail;
}
if (si.si_status != 0) {
r = sd_bus_error_setf(error, SD_BUS_ERROR_FAILED, "mkfs.btrfs failed with error code %i", si.si_status);
goto fail;
}
r = rename_noreplace(AT_FDCWD, tmp, AT_FDCWD, "/var/lib/machines.raw");
if (r < 0) {
sd_bus_error_set_errnof(error, r, "Failed to move /var/lib/machines.raw into place: %m");
goto fail;
}
r = fd;
//.........这里部分代码省略.........
开发者ID:heftig,项目名称:systemd,代码行数:101,代码来源:machine-pool.c
示例3: assert
void *FileLoadWorker ( void *arg )
{
WqInfo_t *wqinfo = (WqInfo_t *)arg;
int threadNum=wqinfo->threadNum;
WorkerInfoQueue *q = wqinfo->wq;
assert ( q );
bool done = false;
char dateStr[256];
struct tm newtime;
time_t ltime;
double T1=0,T2=0,T3,T4;
char name[20];
sprintf(name,"FileLdWkr%d",threadNum);
prctl(PR_SET_NAME,name,0,0,0);
const double noiseThreshold = 0.; // to be set by command line option
FluidPotentialCorrector fpCorr(noiseThreshold);
while ( !done )
{
WorkerInfoQueueItem item = q->GetItem();
if ( item.finished == true )
{
// we are no longer needed...go away!
done = true;
q->DecrementDone();
continue;
}
ImageLoadWorkInfo *one_img_loader = ( ImageLoadWorkInfo * ) item.private_data;
ClockTimer timer;
Timer tmr;
Image *img = &one_img_loader->img[one_img_loader->cur_buffer];
if (one_img_loader->inception_state->img_control.threaded_file_access)
{
tmr.restart();
if ( !img->LoadRaw ( one_img_loader->name) )
{
exit ( EXIT_FAILURE );
}
T1=tmr.elapsed();
tmr.restart();
if(img->raw->imageState & IMAGESTATE_QuickPinnedPixelDetect)
one_img_loader->pinnedInFlow->QuickUpdate ( one_img_loader->flow, img);
else
one_img_loader->pinnedInFlow->Update ( one_img_loader->flow, img,(ImageTransformer::gain_correction?ImageTransformer::gain_correction:0));
T2=tmr.elapsed();
}
tmr.restart();
// correct in-channel electrical cross-talk
ImageTransformer::XTChannelCorrect ( one_img_loader->img[one_img_loader->cur_buffer].raw, one_img_loader->img[one_img_loader->cur_buffer].results_folder ); // buffer_ix
// testing of lossy compression
if(ImageTransformer::PCATest[0]) {
AdvComprTest(one_img_loader->name,&one_img_loader->img[one_img_loader->cur_buffer],ImageTransformer::PCATest,false/*one_img_loader->inception_state->img_control.col_flicker_correct*/ );
}
// col noise correction (if done during lossy compression will already have happened.
else if ( !(img->raw->imageState & IMAGESTATE_ComparatorCorrected) &&
one_img_loader->inception_state->img_control.col_flicker_correct )
{
if( one_img_loader->inception_state->img_control.col_pair_pixel_xtalk_correct ){
PairPixelXtalkCorrector xtalkCorrector;
float xtalk_fraction = one_img_loader->inception_state->img_control.pair_xtalk_fraction;
xtalkCorrector.Correct(one_img_loader->img[one_img_loader->cur_buffer].raw, xtalk_fraction);
}
{
CorrNoiseCorrector rnc;
rnc.CorrectCorrNoise(one_img_loader->img[one_img_loader->cur_buffer].raw,3,one_img_loader->inception_state->bfd_control.beadfindThumbnail );
}
if(one_img_loader->inception_state->bfd_control.beadfindThumbnail)
{
//ComparatorNoiseCorrector
ComparatorNoiseCorrector cnc;
cnc.CorrectComparatorNoiseThumbnail(one_img_loader->img[one_img_loader->cur_buffer].raw, one_img_loader->mask, one_img_loader->inception_state->loc_context.regionXSize,one_img_loader->inception_state->loc_context.regionYSize, one_img_loader->inception_state->img_control.col_flicker_correct_verbose);
} else {
ComparatorNoiseCorrector cnc;
cnc.CorrectComparatorNoise(one_img_loader->img[one_img_loader->cur_buffer].raw, one_img_loader->mask, one_img_loader->inception_state->img_control.col_flicker_correct_verbose, one_img_loader->inception_state->img_control.aggressive_cnc,false,threadNum );
}
}
//#define DEBUG_IMAGE_CORR_ISSUES 1
#ifdef DEBUG_IMAGE_CORR_ISSUES
char newName[1024];
char *nptr,*ptr=one_img_loader->name;
while((nptr = strstr(ptr,"/")))ptr=nptr+1;
if(*ptr == '/')
ptr++;
sprintf(newName,"%s_proc",one_img_loader->name);
//.........这里部分代码省略.........
开发者ID:Lingrui,项目名称:TS,代码行数:101,代码来源:ImageLoaderQueue.cpp
示例4: main
int main(int ac, char **av)
{
int lc, i;
pid_t child_pid;
int status;
tst_parse_opts(ac, av, NULL, NULL);
setup();
for (lc = 0; TEST_LOOPING(lc); lc++) {
tst_count = 0;
for (i = 0; i < TST_TOTAL; ++i) {
switch (child_pid = FORK_OR_VFORK()) {
case -1:
/* fork() failed */
tst_resm(TFAIL, "fork() failed");
continue;
case 0:
/* Child */
TEST(prctl(test_cases[i].option,
test_cases[i].arg2));
if ((TEST_RETURN == -1) && (TEST_ERRNO ==
test_cases
[i].exp_errno)) {
exit(TEST_ERRNO);
} else {
tst_resm(TWARN | TTERRNO,
"prctl() returned %ld",
TEST_RETURN);
exit(TEST_ERRNO);
}
default:
/* Parent */
if ((waitpid(child_pid, &status, 0)) < 0) {
tst_resm(TFAIL, "waitpid() failed");
continue;
}
if ((WIFEXITED(status)) && (WEXITSTATUS(status)
==
test_cases
[i].exp_errno)) {
tst_resm(TPASS, "Test Passed");
} else {
tst_resm(TFAIL, "Test Failed");
}
}
}
}
/* cleanup and exit */
cleanup();
tst_exit();
}
开发者ID:1587,项目名称:ltp,代码行数:66,代码来源:prctl02.c
示例5: join
void join(pid_t pid, const char *homedir, int argc, char **argv, int index) {
extract_command(argc, argv, index);
// if the pid is that of a firejail process, use the pid of the first child process
char *comm = pid_proc_comm(pid);
if (comm) {
// remove \n
char *ptr = strchr(comm, '\n');
if (ptr)
*ptr = '\0';
if (strcmp(comm, "firejail") == 0) {
pid_t child;
if (find_child(pid, &child) == 0) {
pid = child;
printf("Switching to pid %u, the first child process inside the sandbox\n", (unsigned) pid);
}
}
free(comm);
}
// check privileges for non-root users
uid_t uid = getuid();
if (uid != 0) {
uid_t sandbox_uid = pid_get_uid(pid);
if (uid != sandbox_uid) {
exechelp_logerrv("firejail", FIREJAIL_ERROR, "Error: permission is denied to join a sandbox created by a different user.\n");
exit(1);
}
}
// in user mode set caps seccomp, cpu, cgroup, etc
if (getuid() != 0) {
extract_caps_seccomp(pid);
extract_cpu(pid);
extract_cgroup(pid);
extract_nogroups(pid);
extract_user_namespace(pid);
}
// set cgroup
if (cfg.cgroup)
set_cgroup(cfg.cgroup);
// join namespaces
if (join_namespace(pid, "ipc"))
exit(1);
if (join_namespace(pid, "net"))
exit(1);
if (join_namespace(pid, "pid"))
exit(1);
if (join_namespace(pid, "uts"))
exit(1);
if (join_namespace(pid, "mnt"))
exit(1);
pid_t child = fork();
if (child < 0)
errExit("fork");
if (child == 0) {
// chroot into /proc/PID/root directory
char *rootdir;
if (asprintf(&rootdir, "/proc/%d/root", pid) == -1)
errExit("asprintf");
int rv = chroot(rootdir); // this will fail for processes in sandboxes not started with --chroot option
if (rv == 0)
printf("changing root to %s\n", rootdir);
prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0); // kill the child in case the parent died
if (chdir("/") < 0)
errExit("chdir");
if (homedir) {
struct stat s;
if (stat(homedir, &s) == 0) {
/* coverity[toctou] */
if (chdir(homedir) < 0)
errExit("chdir");
}
}
// set cpu affinity
if (cfg.cpus)
set_cpu_affinity();
// set caps filter
if (apply_caps == 1)
caps_set(caps);
#ifdef HAVE_SECCOMP
// set seccomp filter
if (apply_seccomp == 1)
seccomp_set();
#endif
/* We then load the variables that the original Firejail instance applied
* to the original Firejail client whose namespace we're joining. */
load_domain_env_from_chroot_proc();
// mount user namespace or drop privileges
if (arg_noroot) {
//.........这里部分代码省略.........
开发者ID:Sidnioulz,项目名称:firejail,代码行数:101,代码来源:join.c
示例6: prctl
status_t AMRWriter::threadFunc() {
mEstimatedDurationUs = 0;
mEstimatedSizeBytes = 0;
bool stoppedPrematurely = true;
int64_t previousPausedDurationUs = 0;
int64_t maxTimestampUs = 0;
status_t err = OK;
prctl(PR_SET_NAME, (unsigned long)"AMRWriter", 0, 0, 0);
while (!mDone) {
MediaBuffer *buffer;
err = mSource->read(&buffer);
if (err != OK) {
break;
}
if (mPaused) {
buffer->release();
buffer = NULL;
continue;
}
mEstimatedSizeBytes += buffer->range_length();
if (exceedsFileSizeLimit()) {
buffer->release();
buffer = NULL;
notify(MEDIA_RECORDER_EVENT_INFO, MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED, 0);
break;
}
int64_t timestampUs;
CHECK(buffer->meta_data()->findInt64(kKeyTime, ×tampUs));
if (timestampUs > mEstimatedDurationUs) {
mEstimatedDurationUs = timestampUs;
}
if (mResumed) {
previousPausedDurationUs += (timestampUs - maxTimestampUs - 20000);
mResumed = false;
}
timestampUs -= previousPausedDurationUs;
LOGV("time stamp: %lld, previous paused duration: %lld",
timestampUs, previousPausedDurationUs);
if (timestampUs > maxTimestampUs) {
maxTimestampUs = timestampUs;
}
if (exceedsFileDurationLimit()) {
buffer->release();
buffer = NULL;
notify(MEDIA_RECORDER_EVENT_INFO, MEDIA_RECORDER_INFO_MAX_DURATION_REACHED, 0);
break;
}
ssize_t n = write(mFd,
(const uint8_t *)buffer->data() + buffer->range_offset(),
buffer->range_length());
if (n < (ssize_t)buffer->range_length()) {
buffer->release();
buffer = NULL;
break;
}
// XXX: How to tell it is stopped prematurely?
if (stoppedPrematurely) {
stoppedPrematurely = false;
}
buffer->release();
buffer = NULL;
}
if (stoppedPrematurely) {
notify(MEDIA_RECORDER_EVENT_INFO, MEDIA_RECORDER_TRACK_INFO_COMPLETION_STATUS, UNKNOWN_ERROR);
}
close(mFd);
mFd = -1;
mReachedEOS = true;
if ((err == ERROR_END_OF_STREAM) || (err = -ETIMEDOUT)){
return OK;
}
return err;
}
开发者ID:Dmoriarty,项目名称:frameworks_base,代码行数:85,代码来源:AMRWriter.cpp
示例7: main
/**************************** SUBROUTINES ******************************/
int main()
{
int sfd, device_type, channel,num_of_3g;
struct sockaddr_in saddr;
socklen_t len;
pthread_t wifi, threeg;
char name[16];
init_vrms_connection();
init_logging_network_changes();
#if 0
while(1){
send_vrms_data("wlan0", 5);
printf("wlan0 sent\n");
sleep(30);
send_vrms_data("ppp1", 4);
printf("ppp1 sent\n");
sleep(22);
#if 0
send_vrms_data("ppp1", 4);
printf("wlan0 sent\n");
sleep(30);
send_vrms_data("ppp2", 4);
printf("ppp2 sent\n");
sleep(30);
#endif
send_vrms_data("ppp2", 4);
printf("ppp2 sent\n");
sleep(20);
}
#endif
openlog("SeaMo:VHO", LOG_PID, LOG_DAEMON);
/* Obtain a D-Bus connection handler for all D-Bus activities */
conn = (DBusConnection *) get_connection();
init_3g_connections();
/* socket creation for communication with vrms. (earlier this was
done in get_current_network every time it was called which is not
necessary)*/
/* Connect to the available modems */
connect_all_modems(conn);
/* Check if the system is currently connected to any network */
while (!isconnected(conn)) {
syslog(LOG_WARNING,
"Please connect to any available network\n");
sleep(1);
}
/*
char *active_conn[30];
get_active_conn(conn, active_conn);
while (1) {
syslog(LOG_INFO, "Inside while\n");
int conn_state = get_active_conn_state(conn, *active_conn);
if (conn_state == 0 || conn_state == -1) //Unknown state
syslog(LOG_ERR, "Not Connected to any network\n");
else if (conn_state == CONNECTED)
break;
else if (conn_state == ACTIVATING)
continue;
}
*/
system ("sh /usr/local/seamo/sbin/ip_rules_all.sh");
/* Create threads to receive data from pre-handoff */
if (pthread_create(&threeg, NULL, threeg_data, NULL)) {
syslog(LOG_ERR, "error in server threads\n");
}
if (pthread_create(&wifi, NULL, wifi_data, NULL)) {
syslog(LOG_ERR, "error in server threads\n");
}
read_config();
/* Get the signal when the parent process dies */
prctl(PR_SET_PDEATHSIG, SIGHUP);
while (1) {
wifi_avail = wifi_param();
num_of_3g = get_num_of_modems(conn);
if ( num_of_3g >=1){
threeg_avail = threeg_param();
}
else {
threeg_avail == -1 ;
}
syslog(LOG_INFO, "wifi_avail: %d, threeg_avail: %d\n",
wifi_avail, threeg_avail);
//.........这里部分代码省略.........
开发者ID:mandarpradhan,项目名称:Project_Ambulet,代码行数:101,代码来源:vho_main.c
示例8: uv__set_process_title
void uv__set_process_title(const char* title) {
#if defined(PR_SET_NAME)
prctl(PR_SET_NAME, title); /* Only copies first 16 characters. */
#endif
}
开发者ID:sjw7453584,项目名称:Server,代码行数:5,代码来源:linux-core.c
示例9: main
int
main (int argc, char *argv[]) {
int portable = 0;
#if STATICLINK
int staticlink = 1;
#else
int staticlink = 0;
#endif
#if PORTABLE
portable = 1;
if (!realpath (argv[0], dbinstalldir)) {
strcpy (dbinstalldir, argv[0]);
}
char *e = strrchr (dbinstalldir, '/');
if (e) {
*e = 0;
}
else {
fprintf (stderr, "couldn't determine install folder from path %s\n", argv[0]);
exit (-1);
}
#else
if (!realpath (argv[0], dbinstalldir)) {
strcpy (dbinstalldir, argv[0]);
}
char *e = strrchr (dbinstalldir, '/');
if (e) {
*e = 0;
struct stat st;
char checkpath[PATH_MAX];
snprintf (checkpath, sizeof (checkpath), "%s/.ddb_portable", dbinstalldir);
if (!stat (checkpath, &st)) {
if (S_ISREG (st.st_mode)) {
portable = 1;
}
}
}
if (!portable) {
strcpy (dbinstalldir, PREFIX);
}
#endif
#ifdef __GLIBC__
signal (SIGSEGV, sigsegv_handler);
#endif
setlocale (LC_ALL, "");
setlocale (LC_NUMERIC, "C");
#ifdef ENABLE_NLS
// fprintf (stderr, "enabling gettext support: package=" PACKAGE ", dir=" LOCALEDIR "...\n");
if (portable) {
char localedir[PATH_MAX];
snprintf (localedir, sizeof (localedir), "%s/locale", dbinstalldir);
bindtextdomain (PACKAGE, localedir);
}
else {
bindtextdomain (PACKAGE, LOCALEDIR);
}
bind_textdomain_codeset (PACKAGE, "UTF-8");
textdomain (PACKAGE);
#endif
fprintf (stderr, "starting deadbeef " VERSION "%s%s\n", staticlink ? " [static]" : "", portable ? " [portable]" : "");
srand (time (NULL));
#ifdef __linux__
prctl (PR_SET_NAME, "deadbeef-main", 0, 0, 0, 0);
#endif
#if PORTABLE_FULL
if (snprintf (confdir, sizeof (confdir), "%s/config", dbinstalldir) > sizeof (confdir)) {
fprintf (stderr, "fatal: too long install path %s\n", dbinstalldir);
return -1;
}
strcpy (dbconfdir, confdir);
#else
char *homedir = getenv ("HOME");
if (!homedir) {
fprintf (stderr, "unable to find home directory. stopping.\n");
return -1;
}
char *xdg_conf_dir = getenv ("XDG_CONFIG_HOME");
if (xdg_conf_dir) {
if (snprintf (confdir, sizeof (confdir), "%s", xdg_conf_dir) > sizeof (confdir)) {
fprintf (stderr, "fatal: XDG_CONFIG_HOME value is too long: %s\n", xdg_conf_dir);
return -1;
}
}
else {
if (snprintf (confdir, sizeof (confdir), "%s/.config", homedir) > sizeof (confdir)) {
fprintf (stderr, "fatal: HOME value is too long: %s\n", homedir);
return -1;
}
}
if (snprintf (dbconfdir, sizeof (dbconfdir), "%s/deadbeef", confdir) > sizeof (dbconfdir)) {
fprintf (stderr, "fatal: out of memory while configuring\n");
return -1;
}
mkdir (confdir, 0755);
#endif
//.........这里部分代码省略.........
开发者ID:Gardenya,项目名称:deadbeef,代码行数:101,代码来源:main.c
示例10: sprintf
void *AudioALSACaptureDataProviderEchoRefExt::readThread(void *arg)
{
status_t retval = NO_ERROR;
AudioALSACaptureDataProviderEchoRefExt *pDataProvider = static_cast<AudioALSACaptureDataProviderEchoRefExt *>(arg);
uint32_t open_index = pDataProvider->mOpenIndex;
char nameset[32];
sprintf(nameset, "%s%d", __FUNCTION__, pDataProvider->mCaptureDataProviderType);
prctl(PR_SET_NAME, (unsigned long)nameset, 0, 0, 0);
#ifdef MTK_AUDIO_ADJUST_PRIORITY
// force to set priority
struct sched_param sched_p;
sched_getparam(0, &sched_p);
sched_p.sched_priority = RTPM_PRIO_AUDIO_RECORD + 5;
if (0 != sched_setscheduler(0, SCHED_RR, &sched_p))
{
ALOGE("[%s] failed, errno: %d", __FUNCTION__, errno);
}
else
{
sched_p.sched_priority = RTPM_PRIO_AUDIO_RECORD + 5;
sched_getparam(0, &sched_p);
ALOGD("sched_setscheduler ok, priority: %d", sched_p.sched_priority);
}
#endif
ALOGD("+%s(), pid: %d, tid: %d, kReadBufferSize=%x", __FUNCTION__, getpid(), gettid(), kReadBufferSize);
// read raw data from alsa driver
char linear_buffer[kReadBufferSize];
while (pDataProvider->mEnable == true)
{
if (open_index != pDataProvider->mOpenIndex)
{
ALOGD("%s(), open_index(%d) != mOpenIndex(%d), return", __FUNCTION__, open_index, pDataProvider->mOpenIndex);
break;
}
retval = pDataProvider->mEnableLock.lock_timeout(300);
ASSERT(retval == NO_ERROR);
if (pDataProvider->mEnable == false)
{
pDataProvider->mEnableLock.unlock();
break;
}
ASSERT(pDataProvider->mPcm != NULL);
clock_gettime(CLOCK_REALTIME, &pDataProvider->mNewtime);
pDataProvider->timerec[0] = calc_time_diff(pDataProvider->mNewtime, pDataProvider->mOldtime);
pDataProvider->mOldtime = pDataProvider->mNewtime;
int retval = pcm_read(pDataProvider->mPcm, linear_buffer, kReadBufferSize);
if (retval != 0)
{
ALOGE("%s(), pcm_read() error, retval = %d", __FUNCTION__, retval);
}
clock_gettime(CLOCK_REALTIME, &pDataProvider->mNewtime);
pDataProvider->timerec[1] = calc_time_diff(pDataProvider->mNewtime, pDataProvider->mOldtime);
pDataProvider->mOldtime = pDataProvider->mNewtime;
pDataProvider->GetCaptureTimeStamp(&pDataProvider->mStreamAttributeSource.Time_Info, kReadBufferSize);
// use ringbuf format to save buffer info
pDataProvider->mPcmReadBuf.pBufBase = linear_buffer;
pDataProvider->mPcmReadBuf.bufLen = kReadBufferSize + 1; // +1: avoid pRead == pWrite
pDataProvider->mPcmReadBuf.pRead = linear_buffer;
pDataProvider->mPcmReadBuf.pWrite = linear_buffer + kReadBufferSize;
pDataProvider->mEnableLock.unlock();
//Provide EchoRef data
#if 0 //for check the echoref data got
pDataProvider->provideCaptureDataToAllClients(open_index);
#else
pDataProvider->provideEchoRefCaptureDataToAllClients(open_index);
#endif
clock_gettime(CLOCK_REALTIME, &pDataProvider->mNewtime);
pDataProvider->timerec[2] = calc_time_diff(pDataProvider->mNewtime, pDataProvider->mOldtime);
pDataProvider->mOldtime = pDataProvider->mNewtime;
ALOGD("%s, latency_in_us,%1.6lf,%1.6lf,%1.6lf", __FUNCTION__, pDataProvider->timerec[0], pDataProvider->timerec[1], pDataProvider->timerec[2]);
}
ALOGD("-%s(), pid: %d, tid: %d", __FUNCTION__, getpid(), gettid());
pthread_exit(NULL);
return NULL;
}
开发者ID:Scorpio92,项目名称:mediatek,代码行数:87,代码来源:AudioALSACaptureDataProviderEchoRefExt.cpp
示例11: _service_run
static void
_service_run (srvmode_t mode, int rfdno, int wfdno)
{
List l = diod_conf_get_listen ();
int nwthreads = diod_conf_get_nwthreads ();
int flags = diod_conf_get_debuglevel ();
uid_t euid = geteuid ();
int n;
ss.mode = mode;
ss.rfdno = rfdno;
ss.wfdno = wfdno;
ss.shutdown = 0;
ss.reload = 0;
_service_sigsetup ();
ss.fds = NULL;
ss.nfds = 0;
switch (mode) {
case SRV_FILEDES:
break;
case SRV_NORMAL:
if (!diod_sock_listen_hostports (l, &ss.fds, &ss.nfds, NULL))
msg_exit ("failed to set up listen ports");
#if WITH_RDMATRANS
ss.rdma = diod_rdma_create ();
diod_rdma_listen (ss.rdma);
#endif
#if WITH_ETHERTRANS
ss.ether = diod_ether_create();
diod_ether_listen(ss.ether);
#endif
break;
}
/* manipulate squash/runas users if not root */
if (euid != 0) {
if (diod_conf_get_allsquash ()) {
struct passwd *pw = getpwuid (euid);
char *su = diod_conf_get_squashuser ();
if (!pw)
msg_exit ("getpwuid on effective uid failed");
if (strcmp (pw->pw_name, su) != 0) {
if (strcmp (su, DFLT_SQUASHUSER) != 0)
msg ("changing squashuser '%s' to '%s' "
"since you are not root", su, pw->pw_name);
diod_conf_set_squashuser (pw->pw_name); /* fixes issue 41 */
}
} else { /* N.B. runasuser cannot be set in the config file */
uid_t ruid = diod_conf_get_runasuid ();
if (diod_conf_opt_runasuid () && ruid != euid)
msg ("changing runasuid %d to %d "
"since you are not root", ruid, euid);
diod_conf_set_runasuid (euid);
}
}
if (!diod_conf_get_foreground () && mode == SRV_NORMAL)
_daemonize (); /* implicit fork - no pthreads before this */
if (!diod_conf_get_foreground () && mode != SRV_FILEDES)
diod_log_set_dest (diod_conf_get_logdest ());
/* drop root */
if (euid == 0) {
if (diod_conf_get_allsquash ())
_become_user (diod_conf_get_squashuser (), -1, 1);
else if (diod_conf_opt_runasuid ())
_become_user (NULL, diod_conf_get_runasuid (), 1);
}
/* clear umask */
umask (0);
flags |= SRV_FLAGS_LOOSEFID; /* work around buggy clients */
flags |= SRV_FLAGS_AUTHCONN;
//flags |= SRV_FLAGS_FLUSHSIG; /* XXX temporarily off */
if (geteuid () == 0) {
flags |= SRV_FLAGS_SETFSID;
flags |= SRV_FLAGS_DAC_BYPASS;
if (_test_setgroups ())
flags |= SRV_FLAGS_SETGROUPS;
else
msg ("test_setgroups: groups are per-process (disabling)");
}
/* Process dumpable flag may have been cleared by uid manipulation above.
* Set it here, then maintain it in user.c::np_setfsid () as uids are
* further manipulated.
*/
if (prctl (PR_SET_DUMPABLE, 1, 0, 0, 0) < 0)
err_exit ("prctl PR_SET_DUMPABLE failed");
if (!diod_conf_get_userdb ())
flags |= SRV_FLAGS_NOUSERDB;
if (!(ss.srv = np_srv_create (nwthreads, flags))) /* starts threads */
errn_exit (np_rerror (), "np_srv_create");
if (diod_init (ss.srv) < 0)
errn_exit (np_rerror (), "diod_init");
if ((n = pthread_create (&ss.t, NULL, _service_loop, NULL)))
//.........这里部分代码省略.........
开发者ID:alepharchives,项目名称:diod-ether,代码行数:101,代码来源:diod.c
示例12: setproctitle
/*
* Sets the process title to the specified title. Note:
* 1. this function requires root to succeed
* 2. it clears /proc/self/environ
* 3. it may not succed (e.g. if title is longer than /proc/self/environ +
* the original title)
*/
int setproctitle(char *title)
{
char buf[2048], *tmp;
FILE *f;
int i, len, ret = 0;
unsigned long arg_start, arg_end, env_start, env_end;
f = fopen_cloexec("/proc/self/stat", "r");
if (!f) {
return -1;
}
tmp = fgets(buf, sizeof(buf), f);
fclose(f);
if (!tmp) {
return -1;
}
/* Skip the first 47 fields, column 48-51 are ARG_START and
* ARG_END. */
tmp = strchr(buf, ' ');
for (i = 0; i < 46; i++) {
if (!tmp)
return -1;
tmp = strchr(tmp+1, ' ');
}
if (!tmp)
return -1;
i = sscanf(tmp, "%lu %lu %lu %lu", &arg_start, &arg_end, &env_start, &env_end);
if (i != 4) {
return -1;
}
/* Include the null byte here, because in the calculations below we
* want to have room for it. */
len = strlen(title) + 1;
/* We're truncating the environment, so we should use at most the
* length of the argument + environment for the title. */
if (len > env_end - arg_start) {
arg_end = env_end;
len = env_end - arg_start;
} else {
/* Only truncate the environment if we're actually going to
* overwrite part of it. */
if (len >= arg_end - arg_start) {
env_start = env_end;
}
arg_end = arg_start + len;
/* check overflow */
if (arg_end < len || arg_end < arg_start) {
return -1;
}
}
strcpy((char*)arg_start, title);
ret |= prctl(PR_SET_MM, PR_SET_MM_ARG_START, arg_start, 0, 0);
ret |= prctl(PR_SET_MM, PR_SET_MM_ARG_END, arg_end, 0, 0);
ret |= prctl(PR_SET_MM, PR_SET_MM_ENV_START, env_start, 0, 0);
ret |= prctl(PR_SET_MM, PR_SET_MM_ENV_END, env_end, 0, 0);
return ret;
}
开发者ID:Azendale,项目名称:lxc,代码行数:76,代码来源:utils.c
示例13: spawn_bar
static void spawn_bar(int *lemon_in, int *lemon_out, const char *geometry) {
int child_in[2]; //could be done one 2D array, fd[2][2], but harder to read
int child_out[2];
pid_t childpid;
pipe(child_in);
pipe(child_out);
if ((childpid = fork()) == -1) {
perror("fork");
exit(-1);
}
if (childpid == 0) {
//child
if (close(child_in[1]) < 0){ //close input of first pipe
perror("closing child input");
}
if (close(child_out[0]) < 0){ //close output of second pipe
perror("closing child output");
}
//send SIGHUP to us when parent dies
if (prctl(PR_SET_PDEATHSIG, SIGHUP) < 0){ //Linux only
perror("setting up deathsig");
}
if (dup2(child_in[0],STDIN_FILENO) < 0){ //replace lemon stdin with pipe output
perror("setting lemon stdin");
}
if (dup2(child_out[1],STDOUT_FILENO) < 0){ //send lemon output through pipe2 input
perror("setting lemon stdout");
}
signal(SIGUSR1,SIG_IGN);
//if pgrep -x compton; then #ee383a3b else #383a3b fi
execlp("lemonbar", "lemonbar",
"-g",geometry,"-B","#ee383a3b","-F","#ffffff",
"-u","3","-a","20",
"-f","-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso10646-*",
"-f","-*-lemon-medium-*-*-*-10-*-75-75-*-*-iso10646-*",
"-f","-*-uushi-*-*-*-*-*-*-75-75-*-*-iso10646-*",
"-f","-*-siji-*-*-*-*-10-*-75-75-*-*-iso10646-*",
NULL);
exit(0); //if lemonbar exits, don't continue running C code. DIE!
} else {
//parent
if (close(child_in[0]) < 0){ //close output of child's stdin
perror("parent closing output");
}
if (close(child_out[1]) <0){ //close input of its stdout
perror("parent closing intput");
}
*lemon_in = child_in[1]; //child_in[1] is stdin to lemonbar
*lemon_out = child_out[0]; //child_out[0] is lemonbar output
DEBUG_(printf("waiting for lemonbar to start up\n"));
sleep(1); //give time for lemonbar to start, pipes to be swapped
DEBUG_(printf("spawned lemonbar\n"));
}
}
开发者ID:pzl,项目名称:statbar,代码行数:63,代码来源:client.c
示例14: ngx_worker_process_init
static void
ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
{
sigset_t set;
uint64_t cpu_affinity;
ngx_int_t n;
ngx_uint_t i;
struct rlimit rlmt;
ngx_core_conf_t *ccf;
ngx_listening_t *ls;
if (ngx_set_environment(cycle, NULL) == NULL) {
/* fatal */
exit(2);
}
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
if (worker >= 0 && ccf->priority != 0) {
if (setpriority(PRIO_PROCESS, 0, ccf->priority) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"setpriority(%d) failed", ccf->priority);
}
}
if (ccf->rlimit_nofile != NGX_CONF_UNSET) {
rlmt.rlim_cur = (rlim_t) ccf->rlimit_nofile;
rlmt.rlim_max = (rlim_t) ccf->rlimit_nofile;
if (setrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"setrlimit(RLIMIT_NOFILE, %i) failed",
ccf->rlimit_nofile);
}
}
if (ccf->rlimit_core != NGX_CONF_UNSET) {
rlmt.rlim_cur = (rlim_t) ccf->rlimit_core;
rlmt.rlim_max = (rlim_t) ccf->rlimit_core;
if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"setrlimit(RLIMIT_CORE, %O) failed",
ccf->rlimit_core);
}
}
if (geteuid() == 0) {
if (setgid(ccf->group) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"setgid(%d) failed", ccf->group);
/* fatal */
exit(2);
}
if (initgroups(ccf->username, ccf->group) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"initgroups(%s, %d) failed",
ccf->username, ccf->group);
}
if (setuid(ccf->user) == -1) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"setuid(%d) failed", ccf->user);
/* fatal */
exit(2);
}
}
if (worker >= 0) {
cpu_affinity = ngx_get_cpu_affinity(worker);
if (cpu_affinity) {
ngx_setaffinity(cpu_affinity, cycle->log);
}
}
#if (NGX_HAVE_PR_SET_DUMPABLE)
/* allow coredump after setuid() in Linux 2.4.x */
if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"prctl(PR_SET_DUMPABLE) failed");
}
#endif
if (ccf->working_directory.len) {
if (chdir((char *) ccf->working_directory.data) == -1) {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"chdir(\"%s\") failed", ccf->working_directory.data);
/* fatal */
exit(2);
}
}
sigemptyset(&set);
if (sigprocmask(SIG_SETMASK, &set, NULL) == -1) {
//.........这里部分代码省略.........
开发者ID:chengpan,项目名称:test,代码行数:101,代码来源:ngx_process_cycle.c
示例15: main
//.........这里部分代码省略.........
return 1;
}
}
uid = pw->pw_uid;
homedir = pw->pw_dir;
setenv("HOME", homedir, 1);
} else {
uid = 1;
}
if ((getgid() != gid) && setgid(gid)) {
tvhlog(LOG_ALERT, "START",
"setgid() failed, do you have permission?");
return 1;
}
if ((getuid() != uid) && setuid(uid)) {
tvhlog(LOG_ALERT, "START",
"setuid() failed, do you have permission?");
return 1;
}
if(daemon(0, 0)) {
exit(2);
}
if(pidfile != NULL) {
fprintf(pidfile, "%d\n", getpid());
fclose(pidfile);
}
/* Make dumpable */
if (opt_dump) {
#ifdef PLATFORM_LINUX
if (chdir("/tmp"))
tvhwarn("START", "failed to change cwd to /tmp");
prctl(PR_SET_DUMPABLE, 1);
#else
tvhwarn("START", "Coredumps not implemented on your platform");
#endif
}
umask(0);
}
tvheadend_running = 1;
/* Start log thread (must be done post fork) */
tvhlog_start();
/* Alter logging */
if (opt_fork)
tvhlog_options &= ~TVHLOG_OPT_STDERR;
if (!isatty(2))
tvhlog_options &= ~TVHLOG_OPT_DECORATE;
/* Initialise clock */
pthread_mutex_lock(&global_lock);
time(&dispatch_clock);
/* Signal handling */
sigfillset(&set);
sigprocmask(SIG_BLOCK, &set, NULL);
trap_init(argv[0]);
/* SSL library init */
OPENSSL_config(NULL);
SSL_load_error_strings();
SSL_library_init();
开发者ID:joselzinga,项目名称:tvheadend-hdhomerun,代码行数:67,代码来源:main.c
示例16: set_thread_name
inline void set_thread_name(const char* name) noexcept {
prctl(PR_SET_NAME, name, 0, 0, 0);
}
开发者ID:dforsi,项目名称:libosmium,代码行数:3,代码来源:util.hpp
示例17: start
static void start(void *obj, int cam_num, void *display, void *context, void *cam_texture, int egl_image_num) {
opus_capture *_this = (opus_capture*) obj;
pid_t pid = 0;
int pin_fd[2];
int pout_fd[2];
pipe(pin_fd);
pipe(pout_fd);
pid = fork();
if (pid == 0) {
const int MAX_ARGC = 128;
int argc = 0;
char **argv = malloc(MAX_ARGC * sizeof(char*));
argv[argc++] = "ffmpeg";
argv[argc++] = "-v";
argv[argc++] = "quiet";
argv[argc++] = "-f";
argv[argc++] = "alsa";
argv[argc++] = "-i";
argv[argc++] = "hw:1,0";
argv[argc++] = "-strict";
argv[argc++] = "-2";
argv[argc++] = "-b:a";
argv[argc++] = "64k";
argv[argc++] = "-opus_delay";
argv[argc++] = "20";
//output
argv[argc++] = "-f";
argv[argc++] = "opus";
argv[argc++] = "pipe:1";
argv[argc++] = NULL;
// Child
dup2(pin_fd[R], STDIN_FILENO);
dup2(pout_fd[W], STDOUT_FILENO);
//dup2(pout_fd[W], STDERR_FILENO);
#if __linux
//ask kernel to deliver SIGTERM in case the parent dies
prctl(PR_SET_PDEATHSIG, SIGTERM);
#endif
execvp("ffmpeg", argv);
// Nothing below _this line should be executed by child process. If so,
// it means that the execl function wasn't successfull, so lets exit:
exit(1);
}
// The code below will be executed only by parent. You can write and read
// from the child using pipefd descriptors, and you can send signals to
// the process using its pid by kill() function. If the child process will
// exit unexpectedly, the parent process will obtain SIGCHLD signal that
// can be handled (e.g. you can respawn the child process).
//close unused pipe ends
close(pin_fd[R]);
close(pout_fd[W]);
pthread_mutex_init(&_this->frame_data_queue_mutex, 0);
pthread_create(&a
|
请发表评论