element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum Raspberry Pi web server using PiFace, getting "Bad file descriptor"
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 5 replies
  • Answers 1 answer
  • Subscribers 677 subscribers
  • Views 740 views
  • Users 0 members are here
  • badfiledescriptor
  • raspberry-pi
  • cgi
Related

Raspberry Pi web server using PiFace, getting "Bad file descriptor"

Former Member
Former Member over 11 years ago

Hi

 

Using a Raspberry Pi Model B with PiFace. I have downloaded, built and installed the PiFace libraries and enabled the spi devices. I wrote a C program and can turn the relays on and off. That program also sends HTML to the stdout. Indeed when executed I see the HTML on stdout.

 

I have downloaded and installed Apache2. A simple 'Hello World' app runs when I hit the cgi-bin directory with a web-browser. When, I try to hit my c-program using the cgi-bin in my web browser, I get the HTML presented to my browser. I print the time to the webpage so that I know it is working. However, the PiFace IO does not work. If I just run the c-program from the CLI in the cgi-bin directory, it generates the HTML with the time-stamp and actually executes the IO operations.

 

I browse to the Apache2 error log and see this error message "ERROR: Can not send SPI messageBad file descriptor".

 

My c-program has execute permissions.

The spi_bcm2708 module is loaded as confirmed by lsmod.

I get crw-rw---T on both /dev/spidev0.0 and /dev/spidev0.1 when using ls -l /dev/spidev*

 

Any ideas for what else I need to do to make the IO operate under CGI?

Thanks

  • Sign in to reply
  • Cancel
  • mconners
    0 mconners over 11 years ago

    It may be that the web server doesn't have permission to open the SPI device. Apache servers are often setup to run as "nobody". Are you running as root when you run the program from the command line? You may have to perform some permission gymnastics to make it accessible from a cgi program.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to mconners

    Thanks Mike, I feel like I am getting closer. I'm very new to Linux, so learning a lot.

    When I run my program from cgi-bin I'm running as root. i.e. ./toggle executes my program toggle.

    But, when I run using sudo -u nobody ./toggle I get the same error as what I see in the apache log.

    I have tried changing ownership and groups for toggle but so far no luck.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 11 years ago

    Yeah, the problem is probably the apache (I'm guessing it is nobody) user doesn't have access to the SPI dev. I notice you said that the SPI dev has crw-rw--t, that means it has owner and group permission for read and write.

     

    Do an ls -al on /dev/spidev* and see what the group ownership is.

     

    You may need to add "nobody" to that group.

     

    BTW, the ls -al may produce something like

     

    crw-rw---- 1 root root 89, 0 Jan  1  1970 /dev/spidev0.0, which means root is the owner and root is the group (the second root indicates the group) You can change this on bootup, or add "nobody" to the "root" group.

     

    Google "adding a user to a group", but be careful, there are security implications, if this is just a "toy" program, or something local, no big deal, but if this is publicly accessible, be careful.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mconners
    0 mconners over 11 years ago in reply to mconners

    Also, the httpd.conf should give you the username that apache it running as, or you can do

     

    ps auxww | grep apache

     

    to see who the owner is, in /etc/apache2/envvars, I have

     

    export APACHE_RUN_USER=www-data

    export APACHE_RUN_GROUP=www-data

     

    defined on one of my machines, so you may want to edit that file.

     

    Mike

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to mconners

    Thank you Mike,

     

    www-data was the apache user. Changing the owner on the spi devices and the toggle application, now allows me to run toggle from my browser.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2026 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube