コード例 #1
0
ファイル: parentChildWrite.c プロジェクト: MinerGuo/MySocket
int main(int argc, char ** argv) {

	//初始化两个信号集,一个只有usr1,一个只有usr2
	sigemptyset(&t_sigset_usr);
	sigemptyset(&t_sigset_old);
	sigemptyset(&t_sigset_zero);

	sigaddset(&t_sigset_usr, SIGUSR1);
	sigaddset(&t_sigset_usr, SIGUSR2);

	//注册信号处理程序,
	signal(SIGUSR1, do_sig_usr);
	signal(SIGUSR2, do_sig_usr);

	//父进程阻塞usr信号
	sigprocmask(SIG_SETMASK, &t_sigset_usr, NULL );

	pid_t child_pid;

	//父进程fork一个子进程出来
	child_pid = fork();
	if (child_pid == 0) {
		//子进程,从2开始写
		num = 2;

		//注册信号处理程序,
		signal(SIGUSR1, do_sig_usr);
		signal(SIGUSR2, do_sig_usr);

		//子进程阻塞usr信号
		sigprocmask(SIG_SETMASK, &t_sigset_usr, NULL );

		//子进程准备完毕,通知父进程去写
		tell_parent();

		while (1) {
			//始终等待父进程唤醒
			wait_parent();
			write_num_to_file();
			tell_parent();
		}

	} else {
		//父进程
		while (1) {
			//始终等待子进程唤醒
			wait_child();
			write_num_to_file();
			tell_child(child_pid);
		}

	}

	//子进程写入数据,并且告知父进程,然后投入睡眠,等待父进程唤醒

	//父进程等待子进程

	exit(0);
}
コード例 #2
0
int gpio_export(int pin)
{
	if (write_num_to_file("/sys/class/gpio/export", pin))
	{
		CATERR("Failed to open GPIO export for writing\n");
		return -1;
	}

	return 0;
}
コード例 #3
0
int gpio_write(int pin, int val)
{
	char path[256];

	snprintf(path, sizeof(path), "/sys/class/gpio/gpio%d/value", pin);

	if (write_num_to_file(path, val))
	{
		CATERR("Failed to open GPIO export for writing\n");
		return -1;
	}

	return 0;
}