zeus
4 years ago
16 changed files with 260 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
fifo=/tmp/testpipe |
||||
|
rm -f $fifo |
||||
|
mkfifo -m a=rw $fifo |
Binary file not shown.
@ -0,0 +1,28 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <string.h> |
||||
|
#include <fcntl.h> |
||||
|
#include <sys/stat.h> |
||||
|
#include <sys/types.h> |
||||
|
#include <unistd.h> |
||||
|
|
||||
|
|
||||
|
char *phrase = "My child sent me this!!"; |
||||
|
|
||||
|
int main() |
||||
|
{ |
||||
|
int fd[2], bytesread; |
||||
|
char message[100]; |
||||
|
|
||||
|
pipe(fd); |
||||
|
|
||||
|
if (fork()==0) { |
||||
|
close(fd[0]); |
||||
|
write (fd[1],phrase,strlen(phrase)+1); |
||||
|
close(fd[1]); |
||||
|
} else { |
||||
|
close(fd[1]); |
||||
|
bytesread=read(fd[0],message,100); |
||||
|
printf("Read %d bytes:%s\n", bytesread, message); |
||||
|
close(fd[0]); |
||||
|
} |
||||
|
} |
Binary file not shown.
@ -0,0 +1,41 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <string.h> |
||||
|
#include <fcntl.h> |
||||
|
#include <sys/stat.h> |
||||
|
#include <sys/types.h> |
||||
|
#include <unistd.h> |
||||
|
|
||||
|
// C program to implement one side of FIFO
|
||||
|
// This side reads first, then writes
|
||||
|
int main() |
||||
|
{ |
||||
|
int fd1; |
||||
|
|
||||
|
// FIFO file path
|
||||
|
char * myfifo = "/tmp/myfifo"; |
||||
|
|
||||
|
// Creating the named file(FIFO)
|
||||
|
// mkfifo(<pathname>,<permission>)
|
||||
|
mkfifo(myfifo, 0666); |
||||
|
|
||||
|
char str1[80], str2[80]; |
||||
|
while (1) |
||||
|
{ |
||||
|
// First open in read only and read
|
||||
|
fd1 = open(myfifo,O_RDONLY); |
||||
|
read(fd1, str1, 80); |
||||
|
|
||||
|
// Print the read string and close
|
||||
|
printf("User1: %s\n", str1); |
||||
|
close(fd1); |
||||
|
|
||||
|
// Now open in write mode and write
|
||||
|
// string taken from user.
|
||||
|
fd1 = open(myfifo,O_WRONLY); |
||||
|
fgets(str2, 80, stdin); |
||||
|
write(fd1, str2, strlen(str2)+1); |
||||
|
close(fd1); |
||||
|
} |
||||
|
return 0; |
||||
|
} |
||||
|
|
@ -0,0 +1,7 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
for i in `seq 10 30`; do |
||||
|
echo $i |
||||
|
sleep 1 |
||||
|
done > /tmp/testpipe |
||||
|
|
@ -0,0 +1,7 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
|
||||
|
for i in `seq 10 30`; do |
||||
|
echo "allo programma: $i " |
||||
|
sleep 1 |
||||
|
done > /tmp/testpipe |
@ -0,0 +1,7 @@ |
|||||
|
#!/bin/sh |
||||
|
|
||||
|
for i in `seq 10 30`; do |
||||
|
echo $i > /tmp/testpipe |
||||
|
sleep 1 |
||||
|
done |
||||
|
|
Binary file not shown.
@ -0,0 +1,49 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <string.h> |
||||
|
#include <fcntl.h> |
||||
|
#include <sys/stat.h> |
||||
|
#include <sys/types.h> |
||||
|
#include <unistd.h> |
||||
|
|
||||
|
// C program to implement one side of FIFO
|
||||
|
// This side writes first, then reads
|
||||
|
|
||||
|
int main() |
||||
|
{ |
||||
|
int fd; |
||||
|
|
||||
|
// FIFO file path
|
||||
|
char * myfifo = "/tmp/myfifo"; |
||||
|
|
||||
|
// Creating the named file(FIFO)
|
||||
|
// mkfifo(<pathname>, <permission>)
|
||||
|
mkfifo(myfifo, 0666); |
||||
|
|
||||
|
char arr1[80], arr2[80]; |
||||
|
while (1) |
||||
|
{ |
||||
|
// Open FIFO for write only
|
||||
|
fd = open(myfifo, O_WRONLY); |
||||
|
|
||||
|
// Take an input arr2ing from user.
|
||||
|
// 80 is maximum length
|
||||
|
fgets(arr2, 80, stdin); |
||||
|
|
||||
|
// Write the input arr2ing on FIFO
|
||||
|
// and close it
|
||||
|
write(fd, arr2, strlen(arr2)+1); |
||||
|
close(fd); |
||||
|
|
||||
|
// Open FIFO for Read only
|
||||
|
fd = open(myfifo, O_RDONLY); |
||||
|
|
||||
|
// Read from FIFO
|
||||
|
read(fd, arr1, sizeof(arr1)); |
||||
|
|
||||
|
// Print the read message
|
||||
|
printf("User 2: %s\n", arr1); |
||||
|
close(fd); |
||||
|
} |
||||
|
return 0; |
||||
|
} |
||||
|
|
Binary file not shown.
@ -0,0 +1,57 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <pthread.h> |
||||
|
|
||||
|
void *print_message_function( void *ptr ); |
||||
|
|
||||
|
int main() |
||||
|
{ |
||||
|
pthread_t thread1, thread2; |
||||
|
char *message1 = "Thread 1"; |
||||
|
char *message2 = "Thread 2"; |
||||
|
int iret1, iret2; |
||||
|
|
||||
|
/* Create independent threads each of which will execute function */ |
||||
|
|
||||
|
iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); |
||||
|
iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); |
||||
|
|
||||
|
/*
|
||||
|
Arguments: |
||||
|
thread - returns the thread id. (unsigned long int defined in bits/pthreadtypes.h) |
||||
|
attr - Set to NULL if default thread attributes are used. |
||||
|
void * (*start_routine) - pointer to the function to be threaded. Function has a single argument: pointer to void. |
||||
|
*arg - pointer to argument of function. To pass multiple arguments, send a pointer to a structure. |
||||
|
|
||||
|
The following is a list of "thread attributes" and their default values |
||||
|
Attribute Default Meaning of default |
||||
|
contentionscope PTHREAD_SCOPE_PROCESS Thread will compete for resources within the process |
||||
|
detachstate PTHREAD_CREATE_JOINABLE Thread is joinable by other threads |
||||
|
stackaddr NULL Workspace (stack) used by thread is allocated (reserved) by the operating system |
||||
|
stacksize NULL Workspace size used by thread is determined by the operating system |
||||
|
priority 0 Priority of the thread (the lower the priority value, the higher the priority...) |
||||
|
policy SCHED_OTHER The scheduling policy is determined by the system |
||||
|
inheritsched PTHREAD_EXPLICIT_SCHED scheduling policy and parameters are not inherited but explicitly defined by the attribute object |
||||
|
guardsize PAGESIZE size of guard area for a thread's created stack (this area will help determine if the thread has exceeded the total amount of space that was allocated for the thread) |
||||
|
|
||||
|
See https://man7.org/linux/man-pages/man3/pthread_create.3.html
|
||||
|
*/ |
||||
|
|
||||
|
/* Wait till threads are complete before main continues. Unless we */ |
||||
|
/* wait we run the risk of executing an exit which will terminate */ |
||||
|
/* the process and all threads before the threads have completed. */ |
||||
|
|
||||
|
pthread_join( thread1, NULL); |
||||
|
pthread_join( thread2, NULL); |
||||
|
|
||||
|
printf("Thread 1 returns: %d\n",iret1); |
||||
|
printf("Thread 2 returns: %d\n",iret2); |
||||
|
pthread_exit(NULL); |
||||
|
} |
||||
|
|
||||
|
void *print_message_function( void *ptr ) |
||||
|
{ |
||||
|
char *message; |
||||
|
message = (char *) ptr; |
||||
|
printf("%s \n", message); |
||||
|
} |
@ -0,0 +1 @@ |
|||||
|
gcc -pthread -o CreationTermination CreationTermination.c |
Binary file not shown.
@ -0,0 +1,57 @@ |
|||||
|
#include<stdio.h> |
||||
|
#include<string.h> |
||||
|
#include<pthread.h> |
||||
|
#include<stdlib.h> |
||||
|
#include<unistd.h> |
||||
|
|
||||
|
pthread_t tid[2]; |
||||
|
int ret1,ret2; |
||||
|
|
||||
|
void* doSomeThing(void *arg) |
||||
|
{ |
||||
|
unsigned long i = 0; |
||||
|
pthread_t id = pthread_self(); |
||||
|
|
||||
|
for(i=0; i<(4294967295);i++); |
||||
|
|
||||
|
if(pthread_equal(id,tid[0])) |
||||
|
{ |
||||
|
printf("\n First thread processing done\n"); |
||||
|
ret1 = 1; |
||||
|
pthread_exit(&ret1); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
printf("\n Second thread processing done\n"); |
||||
|
ret2 = 2; |
||||
|
pthread_exit(&ret2); |
||||
|
} |
||||
|
|
||||
|
return NULL; |
||||
|
} |
||||
|
|
||||
|
int main(void) |
||||
|
{ |
||||
|
int i = 0; |
||||
|
int err; |
||||
|
int *ptr[2]; |
||||
|
|
||||
|
while(i < 2) |
||||
|
{ |
||||
|
err = pthread_create(&(tid[i]), NULL, &doSomeThing, NULL); |
||||
|
if (err != 0) |
||||
|
printf("\ncan't create thread :[%s]", strerror(err)); |
||||
|
else |
||||
|
printf("\n Thread created successfully\n"); |
||||
|
|
||||
|
i++; |
||||
|
} |
||||
|
|
||||
|
pthread_join(tid[0], (void**)&(ptr[0])); |
||||
|
pthread_join(tid[1], (void**)&(ptr[1])); |
||||
|
|
||||
|
printf("\n return value from first thread is [%d]\n", *ptr[0]); |
||||
|
printf("\n return value from second thread is [%d]\n", *ptr[1]); |
||||
|
|
||||
|
return 0; |
||||
|
} |
@ -0,0 +1 @@ |
|||||
|
gcc -pthread -o CreationTermination1 CreationTermination1.c |
Loading…
Reference in new issue