|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
On March 08 2017 07:20 ShoCkeyy wrote:Show nested quote +On March 08 2017 06:46 plasmidghost wrote:I'm working further on client-server communications and am stuck on this program. I'm trying to have three clients send an integer to a server, along with a private FIFO name so that the server can output the sum of integers from all three clients through the private FIFO that the client named. How do I even do that? I am totally lost. Everything I look at online is not even close to what I'm looking for. + Show Spoiler [Client code] +#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <time.h>
struct output { char privateFIFO[14]; int getpid; int integer; int sum; } inst;
main(void) { int read_from_client; int privateFIFO; struct output; printf("Input a name for your FIFO (up to 14 characters): "); fgets(inst.privateFIFO, 15, stdin); printf("\nFIFO name is %s", inst.privateFIFO); printf("Input an integer: "); scanf("%d", &inst.integer); write(read_from_client, &inst, sizeof(inst)); if ((mkfifo("inst.privateFIFO",0666)<0 && errno != EEXIST)) { perror("cant create FIFO1"); exit(-1); } read(privateFIFO, &inst, sizeof(inst)); printf("The sum of all integers received by the server is %d", inst.sum); return 0; } + Show Spoiler [Server code] +#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h>
struct output { char privateFIFO[14]; int getpid; int integer; int sum; } inst;
main(void) { int read_from_client; int i; struct output; int sum[3]; char tmp1[14]; char tmp2[14]; char tmp3[14]; for(i < 0; i < 3; i++) //should read from the clients and write the integers to an array { read(read_from_client, &inst, sizeof(inst)); inst.integer = sum[i]; if(i == 0) //should write the private FIFO names to separate arrays { tmp1 = inst.privateFIFO; } else if(i == 1) { tmp2 = inst.privateFIFO; } else { tmp3 = inst.privateFIFO; } } inst.sum = sum[0] + sum[1] + sum[2]; //the integer write(tmp1, &inst, sizeof(inst)); //this should send out the sum to each client via a private array, no idea how to make it work write(tmp2, &inst, sizeof(inst)); write(tmp3, &inst, sizeof(inst)); } Sounds like you're trying to do a PING POST system? I worked a ton with LeadMesh, and their ping post system. http://stackoverflow.com/questions/12992653/what-is-a-ping-post I actually completely forgot to mention that I was working in C, I have no idea what that is, unfortunately. My current issue is that the client and server compile, but when I run the client, nothing prompts and I have to force close it. Anyways, updated code, should be better to see now: + Show Spoiler [Client code] +#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <time.h>
struct input { char privateFIFO[14]; int getpid; int integer; } fromClient;
struct output { int sum; } toClient;
main(void) { int read_from_client; int write_to_client; int i; struct output; if((read_from_client=open("FIFO1", O_WRONLY))<0) printf("cant open fifo to write");
if((write_to_client=open("FIFO2", O_RDONLY))<0) printf("cant open fifo to read"); fromClient.getpid = rand()%100000; printf("Your process ID is: %d", fromClient.getpid); printf("Input a name for your FIFO (up to 14 characters): "); fgets(fromClient.privateFIFO, 15, stdin); sprintf(fromClient.privateFIFO, "FIFO_%d", fromClient.getpid); printf("\nFIFO name is %s", fromClient.privateFIFO); printf("Input an integer: "); scanf("%d", &fromClient.integer); write(read_from_client, &fromClient, sizeof(fromClient)); read(write_to_client, &toClient, sizeof(toClient)); printf("The sum of all integers received by the server is %d", toClient.sum); close(read_from_client); close(write_to_client); } + Show Spoiler [Server code] +#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h>
struct input { char privateFIFO[14]; int getpid; int integer; } fromClient;
struct output { int sum; } toClient;
main(void) { int read_from_client; int i; struct output; int sum[3]; int write_to_client[3]; char fifo[3][14]; /* Create the fifos and open them */ if ((mkfifo("FIFO1",0666)<0 && errno != EEXIST)) { perror("cant create FIFO1"); exit(-1); }
if ((mkfifo("FIFO2",0666)<0 && errno != EEXIST)) { perror("cant create FIFO2"); exit(-1); } if((read_from_client=open("FIFO1", O_RDONLY))<0) printf("cant open fifo to read"); toClient.sum = 0; for(i = 0; i < 3; i++) { read(read_from_client, &fromClient, sizeof(fromClient)); strcpy(fifo[i], fromClient.privateFIFO); if((write_to_client[i]=open(fromClient.privateFIFO, O_WRONLY))<0) printf("cant open fifo to write");
printf("Server: Just got an integer.\nClient sent the integer %d", fromClient.integer); toClient.sum = toClient.sum + fromClient.integer; } for(i = 0; i < 3; i++) { write(write_to_client[i], &toClient, sizeof(toClient)); close(write_to_client[i]); unlink(fifo[i]); } }
|
@Manitou I frankly have no idea. I am such a novice that I don't even know about the things I don't know.
Thanks for the link though!!
|
Do you guys think one could create a game that runs natively in every HTML5 browser at the complexity of the SNES Zelda with controller support?
|
There is a snes emulator in Javascript that can run Zelda.
|
|
Can someone recommend a good ARM-emulator, preferably with some tools to inspect memory etc, support of C would be nice too but not a must. OS would be preferably windows, but linux would work too.
|
|
Russian Federation4235 Posts
God, please never ever do this in production code:
Let’s re-set the argument list, aligning like with like, forming a table structure
Anyone who thought of that never thought of using a VCS to merge stuff or auto-refactoring tools or even just manually renaming a variable. It's such a horrible habit people have despite any good styleguide (such as PEP8) explicitly recommending against it. Code is not there to look pretty, whitespace longer than one space should be used for indentation purposes only.
Also, commas in javascript are the saddest thing ever. Starting as an Internet Explorer parser bug, the lack of trailing comma in array definitions inexplicably made it's way into the JSON standard, giving literal thousands of people nightmares about VCS conflict resolution, turning an innocent "me and that other Joe both added an item to the same array, what could go wrong?" situation into a syntax error after the merge. I'm still amazed how this got silently accepted by everyone.
|
Germany2686 Posts
|
I ended up going to that amazon coding assessment/interview thing.
It came in 3 stages. First stage was easy, it was debugging various snippets with a short time limit. Clearly for weeding out. I aced it, I am sure most people did too. Second part was also easy. 24 logic puzzles. I doubt I missed many. Unfortunately I do know I missed one because I realized I misread it after I submitted it.
3rd part I kinda botched. It was 2 coding questions and you got 70 minutes total. First question I got right except I was only passing 15 out of 18 test cases.. not sure why, I must have not read the question closely enough. I decided to move on to the 2nd question and come back to question 1 if I had time. Second question, I understood the question - and had an idea of how to do it. But I think I didn't plan properly, and I committed to a poor plan and wasn't willing to scrap it. And I tried to hack my bad code to make it work and I wasn't able to solve my bugs in the time limit. So I ended up completely failing on the 2nd coding question despite understanding how I could solve it.
Oh well! I actually came in expecting to get my ass kicked. Most of the students there were going into senior year next year. Next time I have an assessment like this I am sure i will do much better.
|
Not a fan of trailing commas in function arguments though. It introduces some uncertainty when reading code (does this function take any more parameters? Are they set to null this way? Did someone forget or accidentally removed something?).
|
Russian Federation4235 Posts
Lol why would JS need atomics haha. Strange times we live in.
|
In C, is it possible to declare a FIFO name as a string name stored in a struct and not directly named? I keep trying to create it and keep getting the error statement in the second block of code How I normally make a FIFO:
if((mkfifo("commonFIFO",0666)<0 && errno != EEXIST)) { perror("cant create commonFIFO"); exit(-1); }
if((read_from_client=open("commonFIFO", O_RDONLY))<0) printf("cant open fifo to read"); How I want to make a FIFO (the FIFO name isn't in quotations, it is being taken from a string name stored in a struct):
if((mkfifo(fromClient.privateFIFO,0666)<0 && errno != EEXIST)) { perror("cant create privateFIFO"); exit(-1); } if((write_to_client=open(fromClient.privateFIFO, O_WRONLY))<0) printf("cant open fifo to write");
|
There's no difference as long as the char array is terminated by a null character.
If you're reading the struct from read, or any network interface, you don't have that guarantee, so you have to sanitize the input. This is done by either force-writing a null character to the end, or reading only the char array into a buffer that you know is terminated with a null character.
Reading your client code, you initialize a size 14 array and then fgets 14 characters + 1 null character, which is beyond the end of the array, but then you also overwrite that array with a string? You also never open privateFIFO in your client so your server never unblocks.
https://linux.die.net/man/3/mkfifo
Once you have created a FIFO special file in this way, any process can open it for reading or writing, in the same way as an ordinary file. However, it has to be open at both ends simultaneously before you can proceed to do any input or output operations on it. Opening a FIFO for reading normally blocks until some other process opens the same FIFO for writing, and vice versa. See fifo(7) for nonblocking handling of FIFO special files.
You should really also, declare struct variables (fromClient, toClient) locally instead of statically declare main with the correct return type (int) use functions to compartmentalize functionality use a common header file to share code between the files
|
On March 09 2017 09:04 Blisse wrote:There's no difference as long as the char array is terminated by a null character. If you're reading the struct from read, or any network interface, you don't have that guarantee, so you have to sanitize the input. This is done by either force-writing a null character to the end, or reading only the char array into a buffer that you know is terminated with a null character. Reading your client code, you initialize a size 14 array and then fgets 14 characters + 1 null character, which is beyond the end of the array, but then you also overwrite that array with a string? You also never open privateFIFO in your client so your server never unblocks. https://linux.die.net/man/3/mkfifoShow nested quote +Once you have created a FIFO special file in this way, any process can open it for reading or writing, in the same way as an ordinary file. However, it has to be open at both ends simultaneously before you can proceed to do any input or output operations on it. Opening a FIFO for reading normally blocks until some other process opens the same FIFO for writing, and vice versa. See fifo(7) for nonblocking handling of FIFO special files. You should really also, declare struct variables (fromClient, toClient) locally instead of statically declare main with the correct return type (int) use functions to compartmentalize functionality use a common header file to share code between the files I ended up reworking the code greatly and simplifying it in some ways,it's actually now going to take a running sum for x number of clients. For each client that inputs one number, it will receive the current sum of all the numbers the server has received from the clients. I removed the option for a private FIFO name to be inputted by the client so that there wouldn't be any collisions if, for instance, two clients inputted the same name, and replaced it with a constant 10-character string. I made the array size 11 + Show Spoiler [Client code] +#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h>
struct input { char privateFIFO[11]; int clientID; int number; } fromClient;
struct output { int sum; } toClient;
main(void) { int read_from_client; int write_to_client; int i; memset(fromClient.privateFIFO, 0, 11); if((read_from_client=open("commonFIFO", O_WRONLY))<0) printf("cant open fifo to write"); fromClient.clientID = getpid(); sprintf(fromClient.privateFIFO, "FIFO_%d", fromClient.clientID); printf("\nFIFO name is %s", fromClient.privateFIFO); printf("\nInput an integer: "); scanf("%d", &fromClient.number);
write(read_from_client, &fromClient, sizeof(fromClient));
if((write_to_client=open(fromClient.privateFIFO, O_RDONLY))<0) printf("cant open fifo to read");
read(write_to_client, &toClient, sizeof(toClient)); printf("The current sum of all integers is %d", toClient.sum); close(read_from_client); close(write_to_client); } + Show Spoiler [Server code] +#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h>
struct input { char privateFIFO[11]; int getpid; int number; } fromClient;
struct output { int sum; } toClient;
main(void) { int read_from_client; int i; int write_to_client; int number_of_clients; memset(fromClient.privateFIFO, 0, 11); printf("How many clients are there? "); scanf("%d", &number_of_clients);
/* Create the fifos and open them */ if((mkfifo("commonFIFO",0666)<0 && errno != EEXIST)) { perror("cant create commonFIFO"); exit(-1); }
if((read_from_client=open("commonFIFO", O_RDONLY))<0) printf("cant open fifo to read"); toClient.sum = 0;
for(i = 0; i < number_of_clients; i++) { read(read_from_client, &fromClient, sizeof(fromClient));
if((mkfifo(fromClient.privateFIFO,0666)<0 && errno != EEXIST)) { perror("cant create privateFIFO"); exit(-1); } if((write_to_client=open(fromClient.privateFIFO, O_WRONLY))<0) printf("cant open fifo to write");
printf("Server: Just got the number %d", fromClient.number); toClient.sum = toClient.sum + fromClient.number; printf("\nServer: Current sum is %d", toClient.sum); write(write_to_client, &toClient, sizeof(toClient)); close(read_from_client); close(write_to_client); } }
|
Take backs, been fighting the flu.
|
On March 09 2017 07:18 travis wrote: I ended up going to that amazon coding assessment/interview thing.
It came in 3 stages. First stage was easy, it was debugging various snippets with a short time limit. Clearly for weeding out. I aced it, I am sure most people did too. Second part was also easy. 24 logic puzzles. I doubt I missed many. Unfortunately I do know I missed one because I realized I misread it after I submitted it.
3rd part I kinda botched. It was 2 coding questions and you got 70 minutes total. First question I got right except I was only passing 15 out of 18 test cases.. not sure why, I must have not read the question closely enough. I decided to move on to the 2nd question and come back to question 1 if I had time. Second question, I understood the question - and had an idea of how to do it. But I think I didn't plan properly, and I committed to a poor plan and wasn't willing to scrap it. And I tried to hack my bad code to make it work and I wasn't able to solve my bugs in the time limit. So I ended up completely failing on the 2nd coding question despite understanding how I could solve it.
Oh well! I actually came in expecting to get my ass kicked. Most of the students there were going into senior year next year. Next time I have an assessment like this I am sure i will do much better.
I like puzzels. Could you please share some?
|
Is there anybody with tensorflow experience who wouldn't mind answering a few PMs? I'm trying to create a simple neural network but can't figure out how to preprocess and feed my data how it wants it.
|
On March 09 2017 21:41 Wrath wrote:Show nested quote +On March 09 2017 07:18 travis wrote: I ended up going to that amazon coding assessment/interview thing.
It came in 3 stages. First stage was easy, it was debugging various snippets with a short time limit. Clearly for weeding out. I aced it, I am sure most people did too. Second part was also easy. 24 logic puzzles. I doubt I missed many. Unfortunately I do know I missed one because I realized I misread it after I submitted it.
3rd part I kinda botched. It was 2 coding questions and you got 70 minutes total. First question I got right except I was only passing 15 out of 18 test cases.. not sure why, I must have not read the question closely enough. I decided to move on to the 2nd question and come back to question 1 if I had time. Second question, I understood the question - and had an idea of how to do it. But I think I didn't plan properly, and I committed to a poor plan and wasn't willing to scrap it. And I tried to hack my bad code to make it work and I wasn't able to solve my bugs in the time limit. So I ended up completely failing on the 2nd coding question despite understanding how I could solve it.
Oh well! I actually came in expecting to get my ass kicked. Most of the students there were going into senior year next year. Next time I have an assessment like this I am sure i will do much better. I like puzzels. Could you please share some?
I can't because you have to sign a non-disclosure agreement and I am going to honor that. But I will tell you that they were not particularly hard, the only hard thing about them is solving them without making errors within the time limit. You wouldn't be particularly satisfied with them - any of us here would be able to answer them given enough time.
|
On March 09 2017 21:41 Wrath wrote:Show nested quote +On March 09 2017 07:18 travis wrote: I ended up going to that amazon coding assessment/interview thing.
It came in 3 stages. First stage was easy, it was debugging various snippets with a short time limit. Clearly for weeding out. I aced it, I am sure most people did too. Second part was also easy. 24 logic puzzles. I doubt I missed many. Unfortunately I do know I missed one because I realized I misread it after I submitted it.
3rd part I kinda botched. It was 2 coding questions and you got 70 minutes total. First question I got right except I was only passing 15 out of 18 test cases.. not sure why, I must have not read the question closely enough. I decided to move on to the 2nd question and come back to question 1 if I had time. Second question, I understood the question - and had an idea of how to do it. But I think I didn't plan properly, and I committed to a poor plan and wasn't willing to scrap it. And I tried to hack my bad code to make it work and I wasn't able to solve my bugs in the time limit. So I ended up completely failing on the 2nd coding question despite understanding how I could solve it.
Oh well! I actually came in expecting to get my ass kicked. Most of the students there were going into senior year next year. Next time I have an assessment like this I am sure i will do much better. I like puzzels. Could you please share some?
5-minute hard limit. Time yourself.
Find the longest palindromic substring in a list of strings.
For example, given strings: "carracecar", "aabbaa", "aabbbabab", return either "racecar" or 7.
|
|
|
|